多态和继承

继承关键词extends 

dog和cat类都继承了Animal

dog       extends         Animal

子类                             父类

派生类                          基类

子类继承父类之后,必须新添加自己特有的成员,体现与基类的不同,否则没必要继承了。

组合:另外一个类的实例对象当作这个类的成员变量
子类访问父类的成员变量

1.子类和父类不存在同名成员变量

如果子类有,优先访问子类,如果子类没有,访问父类,父类也没有,那就报错

如果子类和父类都有相同的变量,访问父类使用关键词super。

this 和 super的区别

this.data      super.data

this.func()    super.func()

this()            super()调用父类的构造方法,必须在第一行,与this()不能同时存在

子类构造方法

在静态方法中是不能使用this和super的

当子类继承了父类之后在实例化对象的时候要先帮助父类进行构造(初始化父类的成员),初始化父类成员的时候,只有一种方法调用构造方法。

在父类中构造一个方法,子类就会报错

在实例化子类对象前,吧父类的对象初始化。

父子父子每次都会先执行一次夫

构造方法中一定会存在super()的调用,用户没有写编译器也会增加,但是用户不写则没有。

1.父类和子类的静态先执行,

2.父类的实例和构造方法,

3.子类的实例和构造方法

4.静态的只执行一次

protected

不同包中的子类,不管同包不同包,只要是子类就行

类内部使用private 公开使用public 子类使用protect。

final:被final修饰的类被叫做密封类。当前类不可以被继承,修饰的变量不可以被修改,还修饰方法,表示改方法不能被重写

组合是代码层次上的一种写法

多态

去完成某个行为,当不同的对象去完成时会产生出不同的形态

向下转型(把父类给子类)非常不安全使用关键字instanceof判读一下

为什么向下转型会报错,报错的原因不是所有的动物都是狗,把大范围的东西给小范围

可以类型强转把animal转换为Dog类型的。

为什么不安全呢?,如图把Dog给了Cat,animal引用的是Dog,把他给了Cat

如何知道animal引用了那个对象引出关键字instanceof

如果if成立才可以进行强制,以后要向下转型必须加入这个关键词,才是安全的,否则可能会出现错误,

向上转型(子类对象给父类)对象的引用方法或者成员变量一定要在类中才可以访问

发生的时机有三步:1.直接赋值 2.传参 3.返回值

方法重写

1.方法名相同

2.返回值相同

3.参数列表相同(个数,顺序,类型)

必须发生向上转型,且通过父类引用调用了父类和子类的中的重写方法

结合这两个步骤 通过父类引用子类对象去调用父类和子类同名的重写方法,此时会发生动态绑定。

动态绑定:编译的时候,确实认为调用的是父类的方法,但是在运行的时候,调用了子类的方法,这个机制就叫做动态绑定。

1.父类引用子类的的对象(向上转型)

2.通过父类引用调用重写的方法

静态方法不能重载

@Override

注解帮助检查 修饰该方法方法就被重写

1.静态方法不能被重写

2.被private修饰的方法也不可以

3.被final不能被重写

4.如果方法被重写,子类的访问权限大于等于父类的权限

被重写的方法返回值类型可以不同,但必须具有父子关系的

多态的实现条件

概念:通过同一个父类的引用,调用同一个重写的方法,此时父类引用子类,引用的子类对象不一样,表现形式也不一样。

1.必须在继承体系下,

2.子类必须对父类中方法进行重写

3.通过父类的引用调用重写的方法

这些可以发生向上转型的时机,方法传参和返回值,直接赋值

优点:让代码更加灵活,可扩展性强,降低了圈复杂度

缺点:不能调用子类特有的方法,代码的运行方法降低,属性没有多态性,多态性只针对方法,父类和子类都有相同的属性,通过父类引用,只能引用父类自己的成员属性。构造方法没有多态性。

构造方法也能发生动态绑定,在构造方法中,避免使用实例方法,不要调用重写的方法,可能会有坑。

多态

当animal引用的对象不一样时,调用eat方法的表现行为不一样时此时就叫做多态。因为,同一个引用调用同一个方法,表现得行为不一样。

如果没有多态则需要大量的if else,能够降低圈复杂度

运用多态的思想大大减少了代码量

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值