Java中的继承

2021-05-05  本文已影响0人  夜希辰

学习笔记

目录:
一、继承的实现
二、继承中成员变量、构造方法、成员方法访问特点
1、继承中成员变量访问的特点
2、继承中构造方法访问的特点:子类所有的构造方法都会访问父类的无参构造方法
3、继承中成员方法访问的特点
三、继承的特点
1、在继承时,子类会继承父类的所有结构。包括属性和方法
2、Java只允许单继承不允许多继承(一个子类继承一个父类)

参考文章:Java中继承的定义与使用

一、继承的实现

在Java中,继承用extends关键字来实现。

继承的格式:
public class 子类名 extends 父类名{}
范例:public class Zi extends Fu{}

继承的好处:

二、继承中成员变量、构造方法、成员方法访问特点

1、继承中成员变量访问的特点

在子类方法中访问一个变量

public class Fu {
    public int age = 20;
    public int height = 170;
    public String name = "fu";
}
public class Zi extends Fu {
    public int height = 175;
    public String name = "zi";

    public void show(){
        String name = "zi局部变量";
        System.out.println("age=" + age);//age是父类中的
        System.out.println("height=" + height);
        System.out.println("name=" + name);
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();
    }
}
2、继承中构造方法访问的特点:子类所有的构造方法都会访问父类的无参构造方法

在下面范例中可以发现,子类在调用无参带参构造方法时,结果都访问了父类的无参构造方法,并在结果中输出了父类的无参构造方法被调用

//父类
public class Fu {
    public Fu(){
        System.out.println("父类的无参构造方法被调用");
    }

    public Fu(int age){
        System.out.println("父类的带参构造方法被调用");
    }
}
//子类
public class Zi extends Fu {
    public Zi(){
        System.out.println("子类的无参构造方法被调用");
    }

    public Zi(int age){
        System.out.println("子类的带参构造方法被调用");
    }
}
//测试入口类
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi z = new Zi();
        System.out.println("---------------");
        Zi z2 = new Zi(30);
    }

}

为什么子类所有的构造方法都会访问父类的无参构造方法呢?

如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?

public class Fu {
//    public Fu(){
//        System.out.println("父类的无参构造方法被调用");
//    }

    public Fu(int age){
        System.out.println("父类的带参构造方法被调用");
    }

}
public class Zi extends Fu {
    public Zi(){
        super(20);//通过使用super关键字去显示的调用父类的带参构造方法
        System.out.println("子类的无参构造方法被调用");
    }

    public Zi(int age){
        super(20);//通过使用super关键字去显示的调用父类的带参构造方法
        System.out.println("子类的带参构造方法被调用"+age);
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi z = new Zi();
        System.out.println("---------------");
        Zi z2 = new Zi(30);
    }

}
3、继承中成员方法访问的特点
public class Fu {
    public void method(){
        System.out.println("父类中的method方法被调用");
    }
    public void show(){
        System.out.println("父类中的show方法被调用");
    }
}
public class Zi extends Fu {
    public void method(){
        System.out.println("子类中的method方法被调用");
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.method();
        z.show();
    }
}

三、继承的特点

1、在继承时,子类会继承父类的所有结构,包括属性和方法。
public class Fu {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Fu() {
        System.out.println("父类的构造方法");
    }

    public void fun() {
        System.out.println("父类的fun()方法");
    }
}
public class Zi extends Fu {
    private String schoolName;
    public String getSchoolName()
    {
        return schoolName;
    }
    public void setSchoolName(String schoolName)
    {
        this.schoolName=schoolName;
    }
    public Zi()
    {
        System.out.println("子类的构造方法");
    }
}
public class ExtendsDemo {
    public static void main(String[] args) {
        Zi Zi=new Zi();//调用构造方法时首先会访问父类的构造方法
        System.out.println("--------------------");
        Zi.setName("小明");
        Zi.setAge(18);
        //隐式继承
        System.out.println("姓名:"+Zi.getName()+" 年龄:"+Zi.getAge());
        System.out.println("--------------------");
        //显示继承
        Zi.fun();//子类没有的方法会去父类成员方法找
    }
}

此时父类中的属性以及方法均被子类所继承,但是发现子类能够使用的是所有非private操作,而所有的private操作无法被直接使用,所以称为隐式继承。

2、Java只允许单继承不允许多继承(一个子类继承一个父类)
上一篇下一篇

猜你喜欢

热点阅读