Java-继承

时间:2021-07-15
本文章向大家介绍Java-继承,主要包括Java-继承使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

什么是继承

现实生活中最常见的 你 和 你爸爸
换到Java中 即 子类 和 父类 子类可以继承父类的属性和方法

注意点

  1. Java只支持单继承!!!!!!!!
  2. 父类中的private定义的方法属性不能继承
  3. final修饰的类不能被继承
  4. 继承通过extends关键字

示例

定义一个Person

package com.oop.demo07;

public class Person {
    private String name;
    private int age;
    public double money;
    public static final String date = "2021-07-14";

    public Person() {
        System.out.println("我是父类构造函数");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }
}

定义一个Student类 继承自Person

package com.oop.demo07;

public class Student extends Person {
    public Student() {
        System.out.println("我是子类的构造函数");
    }

    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.money);
        System.out.println(date);
    }
}

测试输出

从上图可知
子类实例化的时候 会先调用父类的构造方法 再调用子类的构造方法
子类的money属性 date属性都是继承自Person类
子类不会继承父类的任何构造方法!!!

继承树

有一个继承树 (idea快捷键ctrl + h)

在Java中 Person没有写extends关键字 编译器会默认加上extends Object 所以 Java中的任何类 除了Object 都会继承一个类 只是显示写不显示写的情况 而Object类比较特别 他没有父类


就像你只有一个爹
但是你爹可以有多个儿子

super(有继承是前提 必须有父子关系)

super用来调用父类方法和属性的

super注意点

  1. super调用父类的构造方法 必须在子类构造方法第一行
  2. super必须在子类的方法或者构造方法中出现
  3. super this不能同时调用构造方法

super和this区别

代表的对象不同:
this:当前对象
super:父类对象


前提:
this:没有继承也可以使用
super:必须要在继承的前提下才能使用


构造方法:
this:本类的构造
super:父类构造

示例

package com.oop.demo07;

public class Person {
    private String name;
    private int age;
    public double money;
    public static final String date = "2021-07-14";

    public Person(String name) {
        System.out.println("我是父类构造函数");
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void sleep(){
        System.out.println(this.name + "在睡觉");
    }
}


package com.oop.demo07;

public class Student extends Person {
    public Student(String name) {
        super(name);
        System.out.println("我是子类的构造函数");
    }

    public static void main(String[] args) {
        Student student = new Student("yyll");
        System.out.println(student.getName());
    }
}

测试输出

方法重写(必须有继承关系)

注意点

  1. 必须有继承关系 即有父子类
  2. 父类中被private修饰的方法无法继承(继承不了 更别提重写了) 权限问题 Private只能在当前类使用
  3. 父类中被final修饰的方法无法重写
  4. 修饰符范围 可以扩大 但不能缩小 public > protected > default > private
  5. 参数列表必须相同!! 方法名称必须相同

错误示例

正确示例

package com.oop.demo08;

public class Person{

    public void hello(){
        System.out.println("父类的hello方法");
    }
}


package com.oop.demo08;

public class Student extends Person{
    @Override
    public void hello() {
        super.hello();
        System.out.println("子类的hello方法");
    }
}


package com.oop;


import com.oop.demo08.Student;

public class Applcation {
    public static void main(String[] args) {
        Student s = new Student();
        s.hello();
    }
}

测试输出

小结

  1. private关键字定义的 字段方法 只能在本类使用
  2. final修饰的 不能被继承 修饰的方法不能被重写 修饰的变量不能重新赋值
  3. 所有的类都会 隐式或者显式的继承一个类 根祖宗是Object
  4. 修饰符范围大小 public > protected > default > private
即使再小的帆也能远航

原文地址:https://www.cnblogs.com/juanbao/p/15011515.html