节制,是比仁慈更高尚的品德。|

subeipo

园龄:1个月粉丝:0关注:0

📂Java
🔖Java
2025-01-17 10:54阅读: 4评论: 0推荐: 0

Java初学者笔记-01、封装继承多态

  1. 封装:封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。通过封装,可以将类的信息隐藏在类内部,只暴露对外的接口(如setter和getter方法),从而提高代码的安全性和可维护性。
  2. 继承:继承是从已有的类中派生出新的类的过程。新的类(子类)能够吸收已有类(父类)的数据属性和行为,并且可以扩展新的能力。继承提高了代码的复用性和灵活性。
  3. 多态:多态是指一个方法可以有多种实现版本,即“一种定义,多种实现”。多态使得同一个接口可以在不同的对象上表现出不同的行为,从而增加了程序的灵活性和可扩展性。

多态

多态是在继承/实现情况下的一种现象。

多态的表现

表现为:对象多态和行为多态(但没有属性多态)。

//对象多态
Animal a1 = new Wolf();
Animal a2 = new Tortoise();
//行为多态
a1.run();
a2.run();

行为多态体现在编译看左边,运行看右边。编译时判断Animal中是否有run(),有就不报错。运行实际找的是子类Wolf中的run()

多态的好处

  1. 在多态形式下,对象是解耦合的,更便于扩展和维护(声明时,左父类右子对象)。
  2. 定义方法时,父类类型的形参,可以接收一切子类对象,扩展性更强、更便利。
{
//Animal s = new Wolf();
//只需要改右边的子类对象
Animal s = new Tiger();
go(s);
}
public static void go(Animal a){
a.run();
}

上述多态代码的问题:多态下,不能调用子类独有的行为功能
怎么解决?多态下的类型转换。

多态下的类型转换

  1. 自动类型转换:父类 变量名 = new 子类();
  2. 强制类型转换:子类 变量名 = (子类)父类变量;
// 共有方法
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 协议许可协议进行许可。

posted @   subeipo  阅读(4)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起