Java继承

2021-06-05 03:01

阅读:371

标签:完成   能力   void   protect   多重   static   xtend   区别   有一个   

继承

  • 概念:继承是面向对象最显著的一个特性。继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

  • 语法:class 子类 extends 父类 {} 子类又被称为派生类; 父类又被称为超类(Super Class)。

  • 通过代码可以发现,子类(Student)并没有定义任何的操作,而在主类中所使用的全部操作都是由Person类定义的,这证明:子类即使不扩充父类,也能维持父类的操作。

    //父类
    public class Person {
        String name;
    
        public void print(){
            System.out.println("打印这句话!");
        }
    }
    //子类
    public class Student extends Person{
    
    }
    
    public class Application {
        //一个项目只有一个main方法
        public static void main(String[] args) {
            Student student = new Student();
            student.print();
        }
    }
    
    //打印这句话!
    
  • 在Java中,所有的类都直接或者间接继承Object

  • 子类实际上是将父类定义的更加的具体化的一种手段。父类表示的范围大,而子类表示的范围小

  • 限制:

    1. Java之中只允许多层继承,不允许多重继承,Java存在单继承局限。
    2. 在一个子类继承的时候,实际上会继承父类之中的所有操作(属性、方法),但是需要注意的是,对于所有的非私有(no private)操作属于显式继承(可以直接利用对象操作),而所有的私有操作属于隐式继承(间接完成)。
    3. 在继承关系之中,如果要实例化子类对象,会默认先调用父类构造,为父类之中的属性初始化,之后再调用子类构造,为子类之中的属性初始化,即:默认情况下,子类会找到父类之中的无参构造方法。
    4. 现在默认调用的是无参构造,而如果这个时候父类没有无参构造,则子类必须通过super()调用指定参数的构造方法:
  • 在任何的情况下,子类都逃不出父类构造的调用,很明显,super调用父类构造,这个语法和this()很相似:super调用父类构造时,一定要放在构造方法的首行上。

技术图片

public class Person {
    protected String name = "父类名字";
}

public class Student extends Person{
    private String name = "子类名字";

    public void print(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }
}

public class Application {
    //一个项目只有一个main方法
    public static void main(String[] args) {

        Student student = new Student();
        student.print("张三");
    }
}

//张三
子类名字
父类名字

public class Person {
    protected String name = "父类名字";

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

public class Student extends Person{
    private String name = "子类名字";

    public void print(){
        System.out.println("子类方法");
    }
    public void test(){
        print();            //调用自己类的方法
        this.print();       //调用自己类的方法
        super.print();      //调用父类的方法
    }
}

public class Application {
    //一个项目只有一个main方法
    public static void main(String[] args) {

        Student student = new Student();
        student.test();
    }
}

//子类方法
子类方法
父类方法
public class Person {
    protected String name = "父类名字";

    public Person() {
        System.out.println("父类无参构造器");
    }
}

public class Student extends Person{
    private String name = "子类名字";

    public Student() {
        System.out.println("子类无参构造器");
    }
}

public class Application {
    //一个项目只有一个main方法
    public static void main(String[] args) {
        Student student = new Student();  //默认调用父类构造方法
    }
}

//父类无参构造器
  子类无参构造器

Super注意点:

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

Super VS This 的区别

  1. 代表的对象不同

    • this:本身调用这个对象
    • super:代表父类对象的应用
  2. 提前不同:

    • this:没有继承也可以使用
    • super:只能在继承条件下使用
  3. 构造方法:

    • this:本类的构造
    • super:父类的构造

Java继承

标签:完成   能力   void   protect   多重   static   xtend   区别   有一个   

原文地址:https://www.cnblogs.com/saxonsong/p/14626952.html


评论


亲,登录后才可以留言!