- 封装:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过封装,可以将类的信息隐藏在类内部,只暴露对外的接口(如setter和getter方法),从而提高代码的安全性和可维护性。
- 继承:继承是从已有的类中派生出新的类的过程。新的类(子类)能够吸收已有类(父类)的数据属性和行为,并且可以扩展新的能力。继承提高了代码的复用性和灵活性。
- 多态:多态是指一个方法可以有多种实现版本,即“一种定义,多种实现”。多态使得同一个接口可以在不同的对象上表现出不同的行为,从而增加了程序的灵活性和可扩展性。
多态
多态是在继承/实现情况下的一种现象。
多态的表现
表现为:对象多态和行为多态(但没有属性多态)。
//对象多态
Animal a1 = new Wolf();
Animal a2 = new Tortoise();
//行为多态
a1.run();
a2.run();
行为多态体现在编译看左边,运行看右边。编译时判断Animal中是否有run()
,有就不报错。运行实际找的是子类Wolf中的run()
。
多态的好处
- 在多态形式下,对象是解耦合的,更便于扩展和维护(声明时,左父类右子对象)。
- 定义方法时,父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
{
//Animal s = new Wolf();
//只需要改右边的子类对象
Animal s = new Tiger();
go(s);
}
public static void go(Animal a){
a.run();
}
上述多态代码的问题:多态下,不能调用子类独有的行为功能。
怎么解决?多态下的类型转换。
多态下的类型转换
- 自动类型转换:
父类 变量名 = new 子类();
- 强制类型转换:
子类 变量名 = (子类)父类变量;
// 共有方法
Animal a1 = new Tiger();
a1.run();
//现在要调用Tiger的独有方法a2(),必须强制类型转换才能调用
Tiger t1 = (Tiger) a1; //范围大的赋值给范围小的要强转
t1.a2();
强转的注意事项:只要存在继承或者实现的关系,就能在编译阶段强转,编译不报错。但运行时,发现强转的类型对不上,就会报类型转换异常的错误。
People p = new Teacher();
Student s = (Student)p;
为加强正确性,应在强转前,使用instanceof
关键字判断对象的真实类型。
if(p instanceof Student) {Student s = (Student)p;}
标签:类型转换,01,Java,子类,多态,run,Animal,new
From: https://www.cnblogs.com/subeipo/p/18676511/java-chu-xue-zhe-bi-ji01-feng-zhuang-ji-cheng-d