一、面向对象的概念(以设计首饰盒为例)
面向对象:师傅针对用户提出的要求进行分析,并将分析的结果设计成一张完整的图纸,与需求的用户确认,然后将一切的准备工作全部处理完之后再分块制作,最后将各个小部分组装在一起。
面向过程:用户提出哪些需求,师傅就针对用户的要求进行制作,直接制作出一个完整的整体,本身也不准备好做首饰盒所需的工具,而是需要什么再单独拿什么。
二、面向对象的封装性、继承性、多态性
1、封装性:指对外部不可见
public class Person {
String name;
int age;
public void tell () {
System.out.println("姓名:"+name+",年龄:"+age);
}
}
//在主函数调用
Person per =newPerson();
per.name="张三";
per.age= -30;
per.tell();
为上述程序加上封装属性:
public class Person {
private String name;
private int age;
public void tell () {
System.out.println("姓名:"+name+",年龄:"+age);
}
}
主程序访问报错。做如下修改
public class Person {
private String name;
private int age;
public void tell () {
System.out.println("姓名:"+ getName() +",年龄:"+ getAge());
}
public void setAge(int age) {
this.age= age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name= name;
}
public String getName() {
return name;
}
}
Person per =newPerson();
per.setName("张三");
per.setAge(-30);
per.tell();
2、继承性
(1)、类的继承格式
class 父类 { }//定义父类
class 子类 extends 父类 {}// 使用extends 关键字实现继承
父类:
public class Person {
private String name;
private int age;
public void tell () {
System.out.println("姓名:"+ getName() +",年龄:"+ getAge());
}
public void setAge(intage) {
this.age= age;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name= name;
}
public String getName() {
return name;
}
}
通过子类扩展父类的功能
public class Student extends Person {
private String school;//定义新的属性
public void setSchool(String school) {
this.school= school;
}
public String getSchool() {
return school;
}
}
⚠️:(1)、只允许多层继承,而不能多重继承
(2)、继承的子类有时也称派生类
通过getter方法间接取得属性内容:
public voidfun() {
System.out.print("父类中的name属性:"+ getName());
}
3、多态性
三、抽象类与接口的应用
1、抽象类的定义格式
abstract class 抽象类名称{
属性;
访问权限 返回值类型 方法名称(参数){ //普通方法
[return 返回值];
}
访问权限 abstract 返回值类型 方法名称(名称); // 抽象方法
// 在抽象方法中是没有方法体
}
abstract class Person {//定义抽象类person
private String name;//定义name属性
private int age;// 定义age属性
public Person(String name,int age){//抽象类中的定义构造方法
this.setName(name);
this.setAge(age);
}
public void setName(String name) {
this.name= name;
}
public String getName() {
return name;
}
public void setAge(intage) {
this.age= age;
}
public int getAge() {
return age;
}
public abstract String getInfo();//取得信息,抽象方法
}
class Student extends Person {
private String school;//定义新的属性
public Student(String name,intage, String school) {
super(name, age);
this.setSchool(school);
}
public void setSchool(String school) {
this.school= school;
}
public String getSchool() {
return school;
}
@Override
public String getInfo() {
return "姓名 "+super.getName() +
"; 年龄:"+super.getAge() +
"; 学校"+this.getSchool();
}
}
Student stu = new Student("张三",30,"清华大学");
stu.getInfo();
2、接口的定义格式
interface 接口名称 {
全局常量;
抽象方法;
}
interface A {
public static final String AUTHOR="哈哈";// 定义全局常量
public abstract void print();// 定义抽象方法
public abstract String getInfo();// 定义抽象方法
}
abstract class B {// 定义抽象类
public abstract void say();
}
class X extends B implements A {// 子类同时实现接口
public void say() {// 覆写接口A中的抽象方法
System.out.print("hello world!!");
}
public String getInfo(){// 覆写接口A的抽象方法
return "HELLO";
}
public void print() {// 覆写接口A中的抽象方法
System.out.print("作者:" + AUTHOR);
}
}
3、接口的多继承
interface 子接口 extends 父接口A,父接口B,父接口C,.... {
}
4、抽象类的应用 ——模板设计
5、接口的应用 ——工厂模式、代理模式
四、异常的捕获及处理
try{
// 有可能异常的处理语句
}catch(异常类 异常对象){
// 编写异常的处理语句
}
finally{
//一定会运行到的程序代码
}
五、 包及访问控制权限
1、访问权限:
private:表示属性私有访问权限,只能在本来中进行访问。
default:表示默认访问权限可以被本包中的其他类所访问,但是不能被其他包的类所访问。
protected:表示受保护的访问权限。只能被本包及不同包的子类访问。
public: 表示此方法可以被外部调用。
static: 表示此方法可以由类名称直接调用。
void:主方法是程序的起点,所以不需要任何返回值。
main:系统规定好默认调用的方法名称,执行时默认找到main方法类。
String args[]: 表示的是运行时的参数。参数传递的形式 “Java类名称 参数1 参数2 参数3 ...”