Java初学者笔记-01、封装继承多态
- 封装:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过封装,可以将类的信息隐藏在类内部,只暴露对外的接口(如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;}
本文作者:subeipo
本文链接:https://www.cnblogs.com/subeipo/p/18676511/java-chu-xue-zhe-bi-ji01-feng-zhuang-ji-cheng-duo
版权声明:本作品采用署名—非商业性使用—相同方式共享 4.0 协议许可协议进行许可。
分类:
标签:
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步