JAVA继承

本文详细介绍了Java中的继承特性,包括单继承、final类、super关键字的使用、构造器的执行顺序以及访问修饰符的影响。通过示例展示了如何创建和调用父类的方法与属性,以及子类如何扩展和覆盖父类的功能。强调了子类继承父类的public和protected成员,但无法继承private成员。此外,还提到了java中所有类最终继承自Object类的事实。
摘要由CSDN通过智能技术生成

java继承

本质:对某一批类的抽象

java中只有单继承,没有多继承

一个子类只能有一个父类,但是一个父类可以有多个子类

被final修饰的类无法继承 即final之后“断子绝孙”

继承使用extends关键字,子类(派生类)是父类(基类)的扩展

这里让Student类继承Person类

package com.yuanyu.Oop;

public class Student extends Person {
}

通过快捷键Ctrl+H可以查看继承关系

在java中,所有类都默认直接或间接继承Object类

java中类与类之间的关系还有依赖、组合、聚合等等...

子类继承父类的所有方法和属性,但是私有的属性方法无法继承

package com.yuanyu.Oop;

public class Person {
    //public
    public int money=100000;
    //private
    private int money1=100000;
  
    public void say(){
        System.out.println("I can speak.");
    }
}

package com.yuanyu.Oop;

public class Student extends Person {
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.say(); //I can speak.
      
        //public
        System.out.println(student.money); //100000
        //private
        //System.out.println(student.money1); //无法调用
        
    }
}

修饰符:

  • public(继承)
  • protected
  • default
  • private (无法继承)

子类调用父类使用super关键字

this表示当前类

子类可以继承父类protected类型的属性

package com.yuanyu.Oop;

public class Person {
    protected String name="shangxian";
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.test("mixu");
    }
}

package com.yuanyu.Oop;

public class Student extends Person {
    private String name="yuanyu";

    public void test(String name){
        System.out.println(name); //mixu
        System.out.println(this.name); //yuanyu
        System.out.println(super.name); //shangxian
    }
}

子类继承父类的方法

package com.yuanyu.Oop;

public class Person {
    public void print(){
        System.out.println("Person");
    }
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
        student.test();
    }
}

package com.yuanyu.Oop;

public class Student extends Person {
    public void print(){
        System.out.println("Student");
    }

    public void test(){
        print(); //Student
        this.print(); //Student
        super.print(); //Person
    }
}

继承时构造器的执行

package com.yuanyu.Oop;

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

package com.yuanyu.Oop;

public class Student extends Person {
    public Student() {
        //super(); //隐藏调用父类的无参构造器
        System.out.println("Student无参构造器");
    }
}

package com.yuanyu.Oop;

public class Application {
    public static void main(String[] args) {
        Student student=new Student();
    }
}

通过观察运行结果会发现,父类的构造器先执行,子类的构造器后执行,即子类的构造方法中隐藏了调用父类无参构造的代码super();且super();必须放在第一行否则会报错。
父类没有无参构造,子类也不会有无参构造,重写了有参构造要把无参构造写上,若父类重写了有参构造而没有增加无参构造,子类调用父类的有参构造不会有错,但是子类调用的是父类的无参构造或没有调用时则会报错。

super注意点:

  1. super调用父类的构造方法,必须在构造方法的第一行

  2. super必须只能出现在子类的方法或构造方法中

  3. super和this不能同时调用构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值