继承及其多态

一、继承

继承:就是⼦类继承⽗类的属性和⾏为,使得⼦类对象具有与⽗类相同的属性、相同的⾏为。⼦类可以直接访问⽗类中的⾮私有的属性和⾏为。

通过 extends 关键字,可以声明⼀个⼦类继承另外⼀个⽗类

一、 继承后的特点

一、成员变量:

⼦⽗类中出现了同名的成员变量时,在⼦类中需要访问⽗类中⾮私有成员变量时,需要使⽤ super 关键字,修饰⽗类成员变量,类似于之前学过的 this 。

二、成员方法:

⽅法重写:⼦类中出现与⽗类⼀模⼀样的⽅法时(返回值类型,⽅法名和参数列表都相同),会出现覆盖效果,也称为重写或者复写。声明不变,重新实现。

重载:
在方法参数不同时,返回值不影响重载
在方法名与参数都相同时,不构成重载

注意事项:

  1. ⼦类⽅法覆盖⽗类⽅法,必须要保证权限⼤于等于⽗类权限。
  2. 异常:子类方法的异常类型不能多于父类的异常类型。
  3. ⼦类⽅法覆盖⽗类⽅法,返回值类型、函数名和参数列表都要⼀模⼀样。
  4. 返回值为引用类型的,子类方法的返回值只能是父类方法返回值的子类。
  5. static和fianl 修饰的方法不能被重写,被final修饰的类不能被继承。

三、构造方法

1.构造⽅法的名字是与类名⼀致的。所以⼦类是⽆法继承⽗类构造⽅法的。
2. 构造⽅法的作⽤是初始化成员变量的。所以⼦类的初始化过程中,必须先执⾏⽗类的初始化动作。⼦类的构造⽅法中默认有⼀个 super() ,表示调⽤⽗类的构造⽅法,⽗类成员变量初始化后,才可以给⼦类使⽤。
3. 子类构造方法必须调用父类的构造方法,当父类有参构造方法覆盖无参构造方法后,子类构造器默认的super()将无法调用父类的构造器,需要手动调用。

二、继承的特点

  1. Java只⽀持单继承,不⽀持多继承。
  2. Java⽀持多层继承(继承体系)。
  3. 继承接口可以实现多继承。

在这里插入图片描述

三、继承的多态

在这里插入图片描述
对于上图的答案可以这样理解:多态,编译看左边,执行看右边
可以看作,foo创建后父类和子类对象同时存在,foo指向父类,但被操作的对象是子类。
它调用方法会对子类对象进行操作,调用属性则是父类的。可以发现强制将父类转换为子类后,它将指向子类已经存在的对象,从而属性值会发生改变,且子类对象的值已经被操作过了。

以下代码进行验证:

 public class Person {
        public int a;

        public Person() {
            a = 3;
        }

        public void sayHello(){
            this.a += 5;
            System.out.println("你好!");
        }
    }
    class Student1 extends Person{
        int a;

        public Student1() {
            a = 8;
        }

        public void sayHello(){
            a += 5;
            System.out.println("hello!我是一名酷酷的学生");
        }
        public static void main(String[] args) {
            //声明父类的引用
            Person person;
            //使用person引用,调用子类对象中重写的方法
            //关键点在于,在调用sayHello方法的时候,引用person指向的对象是谁
            person =new Student1();
            System.out.println(person.a);
            //Student1 s = (Student1)person;
            //System.out.println(s.a);
            person.sayHello();
            Student1 s = (Student1)person;
            System.out.println(s.a);
            System.out.println(person.a);
            System.out.println(s.a  );
        }
    }

输出:

3
hello!我是一名酷酷的学生
13
3
13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值