面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据
三大特征:
-
封装
-
继承
-
多态
封装(属性私有)
举个例子:创建一个类,名为EncapSulation
public class EncapSulation {
private String name;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
main方法通过new一个对象来对类EncapSulation进行操作
public class Application {
public static void main(String[] args) {
EncapSulation encapsulation = new EncapSulation();
EncapSulation.setName("张三");
}
}
封装的作用(好处):
-
提高了代码的安全性
-
隐藏代码的实现细节
-
统一接口
-
系统可维护性增加了
快速设置get/set快捷键:
Alt + Insert
继承
如果定义一个父类Father,一个子类Son,那么子类Son就可以继承父类Father的非私有(private),非保护(protected)的属性和方法
关键词:extends
public class Son extends Father {
}
Java中类只有单继承,没有多继承:父类可以有多个子类,但子类不能有多个父类
快捷键:Ctrl + H 查看继承关系
多态
-
同一个方法可以根据发送对象不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的, 但可以指向对象的引用类型有很多, 如Son是继承Father类的,那么创建对象时就可以有:
Son son = new Son();// 创建一个子类对象son, 可以调用自己的或是Father类的方法 Father father = new Son();// 创建一个父类对象father, 实际类型是子类Son的, 但不能调用子类Son独有的方法,可以调用子类重写父类的方法
举个例子:
1.创建一个Son类并写入run方法
-
public class Son extends Father{ public void run() { System.out.println("Sonrun方法结果输出"); } }
2.创建一个Father类并写入run方法 -
public calss Father { public void run() { System.out.println("Father的run方法结果输出"); } }
3.那么在启动类里(main方法)
public class Application { public static void main(String[] args) { Son son = new Son();// 创建一个子类对象son, 可以调用自己的或是Father类的方法 Father father = new Son();// 创建一个父类对象father, 实际类型是子类Son的, 但不能调用子类Son独有的方法,可以调用子类重写父类的方法 son.run(); father.run();// 方法已经被重写 } }
4. 控制台输出结果
-
Son的run方法结果输出 Son的run方法结果输出
-
多态注意事项:
-
多态是方法的多态, 属性没有多态
-
必须要有联系, 如果没有联系, 就会出现转换异常!ClassCastException!
-
存在条件:继承关系, 方法需要重写, 父类引用指向子类对象! Father father = new Son();
-
有些修饰词不能被重写:
-
static 方法, 静态方法, 不属于实例
-
final 方法, 为常量
-
private 方法, 私有的,不能被重写
-
-
对象的强制转换 :instanceof
-
使用条件:父类引用指向子类的对象 Father father = new Son();
-
使用方法:
-
把子类转换为父类,向上转型,可自动转换,但注意可能会丢失掉原本子类独有的方法
-
把父类转换为子类,向下转型,强制转换,((子类型)对象).子类型方法;如((Son)son).run();
-
-
强制转换的作用:
1.方便方法的调用,减少代码的重复!
2.判断两个类是否有关系,能否编译通过:如定义三个类
那么
Person person = new Student();
System.out.println(person instanceof Student);// 输出为true
System.out.println(person instanceof Person);// 输出为true
System.out.println(person instanceof Object);// 输出为true
System.out.println(person instanceof Teacher);// 输出为False
System.out.println(person instanceof String);// 编译报错
最后还是要强调一下:面向对象的本质就是:以类的方式组织代码,以对象的组织(封装)数据
感谢您的观看,如果本文有什么不正确的地方,请在下方评论区指出,谢谢