欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

学习Java中遇到的继承问题

程序员文章站 2023-02-21 10:10:48
子类只能继承父类所有非私有的成员(成员方法和成员变量) 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法 调用子类构造方法时默认访问父类中无参构造方法(子类初始化之前,一定要先完成父类数据的初始化) 如果在父类中有公有的get/set方法,可以访问到父类中的私有属性:通过显 ......

子类只能继承父类所有非私有的成员(成员方法和成员变量)

子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法

 

class father {
    //私有属性
    private int num = 10;
    public int num2 = 20;
    
    //私有方法
    private void method() {
        system.out.println(num);
        system.out.println(num2);
    }
    
    public void show() {
        system.out.println(num);    
        system.out.println(num2);
    }
}

class son extends father {
  public void function() {
        //err
        //num 在 father 中是 private 访问控制
        //子类不能继承父类私有成员变量
        //system.out.println(num);    
        system.out.println(num2);
    }
}

public class extendsdemo {
    public static void main(string[] args) {
        son s = new son();
        //子类不能继承父类的私有方法
                //s.method();    
        s.show();
        s.function();
    }
}
    

调用子类构造方法时默认访问父类中无参构造方法(子类初始化之前,一定要先完成父类数据的初始化)

如果在父类中有公有的get/set方法,可以访问到父类中的私有属性:通过显式调用父类带参构造方法

//抽象动物类
abstract class animal {
    //姓名
    private string name;
    //年龄
    private int age;
    
    public animal() {}
    
    public animal(string name,int age) {
        this.name = name;
        this.age = 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 abstract void eat();
}

//定义具体的狗类
class dog extends animal {
    public dog() {}
    
    public dog(string name,int age) {
        //试图这样对name和age初始化会报错
        //name 在 animal 中是 private 访问控制
        //this.name = name;
        //this.age = age;
                //通过访问父类带参构造来初始化
                super(name,age);
    }
    
    public void eat() {
            system.out.println("dog");
    }
}

//测试类省略