Java继承与多态

1.继承

继承的意义在于,对每个类的共性进行抽取,实现代码的复用

1.1继承的语法

在Java中如果要表示类之间的继承关系,需要借助extends关键字,具体如下:

public class People {
    String name;
    int age;

    void eat(){
        System.out.println(name + "eating...");
    }
    void sleep(){
        System.out.println(name + "sleeping");
    }
    void show(){
        System.out.println(name + age);
    }
}

建立一个父类/基类/超类People

public class ZACK extends People{
    void say(){
        System.out.println(name + "like hhx");
    }
}
public class HHX extends People{
    void say(){
        System.out.println(name + "like zack");
    }
}

建立两个子类/派生类,用extends来获取父类的成员变量和方法

1.2父类成员访问

成员变量访问遵循就近原则,自己有优先自己的,如果没有则向父类中找

同样的成员方法也是一样

出现空值是因为赋值在子类,父类自己提供的空值

1.3super关键字

那么如果出现父类和子类出现同名的变量又要怎么去访问父类的变量呢?

那就是super关键字,利用super关键字来访问父类变量

注意:只能在非静态方法中使用

1.4 子类构造方法

在父类的构造方法带了参数时:子类继承父类之后需要调用父类的构造方法给父类初始化变量

在父类的构造方法没有带参数时:Java会自己提供一个不带参数的super()在子类

1.5 this与super的区别

this用来调用本类的构造方法,super用来调用父类的构造方法

this()和super()都要放在第一行,所以this()和super()是不能共存的

注意:都不能在静态方法中使用

1.6再谈初始化

这里创建了两个对象

1. 静态代码块先执行,并且只执行一次,在类加载阶段执行

2. 当有对象创建时,才会执行实例代码块,实例代码块执行完成后,最后构造方法执行

 优先执行父类和子类的静态代码块

再执行父类的实例和构造,和子类的实例和构造

1.7 protected 关键字

使用protected,可以在不同包里使用同一个类

1.8 final 关键字

使用final关键字就不能修改值,表示常量,相当于给予了一个不可变性

使用final关键字的方法不能被继承

2.多态

2.1多态的概念

多态可以理解为不同的事物对待同一件事的状态

比如猫和狗对于吃饭的状态是不同的

引用的对象不一样,但是调用的方法一样,这种思想我们叫做多态

2.2多态实现条件

1. 必须在继承体系下

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

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

这里对于同一个eat方法,在不同的对象引用有不同的表现,这就是多态

2.3向上转型

向上转型就是父类引用了子类对象

向上转型的三种方式

1.直接赋值

2.通过方法赋值

3.返回值

先来说第一个,直接用父类的类型创建子类对象

建立一个func的方法,传入子类的对象 

这里用父类类型去接收,再把func方法返回值也设置成父类 

注意:通过父类的引用不能调用子类的特有的方法,只能调用父类自己的

 2.4向下转型

需要强制类型转换

父类引用子类对象,再通过强制类型转换让子类引用,达到调用子类方法的效果

用instanceof关键字可以判断是否引用了对象

2.5 @override

注解,在没有满足重写的任何一个条件就会报错

2.6动态绑定

大前提:在继承的情况下

子类与父类构成重写,通过父类引用子类对象,可以理解为把子类方法的地址给到了父类,这就是动态绑定

2.7重写与重载的区别 

重写的注意事项

1.不能是一个静态方法

2.不能被final修饰

3.如果子类重写父类方法发情况下子类的权限要大于等于父类的权限

4.被private修饰的方法,是不能被重写的

5.构成父子关系也是重写,也就是上图的特殊情况

  • 25
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值