2020.7.22

学习内容:

1、Java中的继承

Java中的继承使用关键字  extends  表示

  • class 子类 extends 父类 { }

使用继承,子类可以拥有父类中的非私有属性,即父类中的非私有属性可以供子类共享,这样多个类中相同的属性就可以抽取出来作为父类管理

注:Java不支持多继承,一个类只能继承一个类,即子类只能继承一个父类,但是一个父类可以被多个子类继承

2、super 关键字

在Java继承中,子类可以使用 super 关键字调用父类的非私有属性和非私有方法,还可以调用父类的非私有构造方法

(1)使用 super 关键字调用父类属性

  • super . 父类属性(super 关键字可以省略)
  • super . 父类方法

(2)使用 super 关键字调用父类的构造方法

使用 super 调用父类的构造方法与使用this 调用构造方法有异曲同工之处,如果使用 super (),则是调用父类的无参构造方法;如果 super (参数),则是调用父类有参数的构造方法

//调用父类的属性 name
        String name = super.name; 
//调用父类的方法 getAge()
        public void test() {
            super.getAge();
        }
//调用父类构造函数
        public Student() {
            super("sky",26);
        }

(3)子类和父类构造方法的执行顺序

  1. 子类默认调用父类的无参构造方法,也就是说,子类的构造方法中会默认调用 super (),并且在构造方法的第一行
  2. 如果子类只提供有参的构造方法,则必须在子类的构造方法中调用父类的构造方法
  3. 执行完父类的构造方法后,再调用本类中的构造方法

注:为了更好地继承类,每个父类都应该提供无参的构造方法,避免造成没有构造方法而造成继承错误

3、Java中多态的实现

Java中多态的体现具体表现在方法的重载和覆盖上

覆盖主要是指子类重写了父类中的方法

子类重写父类中的方法,即子类中的方法与父类中的方法保持一致,但是方法的修饰符一定要大于等于父类中方法的修饰符

4、类型检测——向上转型 / 向下转型

(1)向上转型

 向上转型是指父类对象的引用指向子类对象

  • 父类 对象 = new 子类()
package day01;

public class Father {
    public void say() {
        System.out.println("father say()");
    }
    public static void main(String[] args) {
            //向上转型
        Father son=new Son();
        son.say();
            
        }
    }
class Son extends Father{
    public void say() {
        System.out.println("son say()");
    }
}

结果为: son  say( )

因为父类对象的引用指向的是一个子类,所以打印方法也会是子类的方法

注意:有时使用向上转型会丢失掉子类特有的方法,例如:

(2)向下转型

  • 父类 对象1 = new 子类();子类 对象2 = (子类)对象1

使用向下转型必须使用(类型) 进行强转

package day01;
public class Father {
    public void say() {
        System.out.println("father say()");
    }
    public static void main(String[] args) {
        //向上转型
        Father son=new Son();
        //向下转型
        Son son2=(Son)son;
        son2.sayMe();    
        }
    }
class Son extends Father{
    public void say() {
        System.out.println("son say()");
    }
    public void sayMe() {
        System.out.println("son sayMe()");
    }
}

注意:不能将父类对象强转成子类对象,例如:

 在开发中,凡是用到继承,我们应该第一想到使用向上类型转换

 

遇到的问题:

1、转型问题不太理解

https://www.cnblogs.com/wangtianze/p/6691216.html

向下转型的意义

向上转型的意义

明天要学习的内容:

 5.2.3 动态绑定  5.3 static 关键字 5.4 final 关键字

原文地址:https://www.cnblogs.com/ltw222/p/13395943.html