Javaの学習の概要:9

相続

継承はオブジェクト指向の2番目の主な機能であり、継承はコードの再利用の問題を解決することです。継承を使用すると、既存のクラスから新しいサブクラスを引き続き派生させることができます。サブクラスを使用してさらに拡張することもできます。操作機能。

継承された実装

継承されたフォーマット

class 子类 extends 父类 {}

サブクラスは実際には親クラスをより具体的に定義する手段です

説明:
1. extendsの場合、これは拡張機能として変換されますが、理解の便宜上、一律に継承と呼ばれます
2.サブクラスは派生クラスとも呼ばれます
3.親クラスはスーパークラスとも呼ばれます。

継承された実装:

class Person{
    private String name;
    private int age;
    public void setName(String name){
        this.name=name;
    }
    public void setAge(int age){
        this.age=age;
    }
    public String getName(){
        return this.name;
    }
    public int getAge(){
        return this.age;
    }
}
class Student extends Person{   //Student类继承了Person类
    private String school;  //子类扩充的属性
    public void setSchool(String school){   //扩充的方法
        this.school=school;
    }
    public String getSchool(){     //扩充的方法
        return this.school;
    }
}
public class Test1_1_3_3 {
    public static void main(String args[]){
        Student stu=new Student();  //实例化的是子类
        stu.setName("小关");  //Person类定义
        stu.setAge(19);
        stu.setSchool("西安邮电大学");    //Student类扩充方法
        System.out.println("姓名:"+stu.getName()+",年龄:"+stu.getAge()+",学校:"+stu.getSchool());
    }
}
//结果:
//姓名:小关,年龄:19,学校:西安邮电大学

継承制限

1. Javaは多重継承を許可しませんが、多重継承を許可します。Javaには単一の継承制限があります。

間違った継承:(多重継承)

class A{}
class B{}
class C extends A,B{}	//一个子类继承两个父类

マルチレベルの継承:

class A{}
class B extends A{}	//B类继承A类
class C extends B{}	//C类继承B类

2.サブクラスが親クラスを継承する場合、厳密に言うと、親クラスのすべての操作を継承しますが、すべてのプライベート操作は暗黙的な継承であり、すべての非プライベート操作は明示的な継承です。

class A{
    private String msg;
    public void setMsg(String msg){
        this.msg=msg;
    }
    public String getMsg(){
        return this.msg;
    }
}
class B extends A{//继承自A类
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        B b=new B();
        b.setMsg("HelloWorld");
        System.out.println(b.getMsg());
    }
}
//结果:
//HelloWorld

上記からわかるように、msg属性はクラスBに存在する必要があり、この属性は親クラスから継承されます。
ただし、クラスBのmsg属性に直接アクセスすることはできません。これは、クラスAのプライベート宣言であり、セッターメソッドまたはゲッターメソッドを使用して間接的にプライベート属性にアクセスできるためです。

3.サブクラスオブジェクトが構築される前に、親クラスオブジェクトがデフォルトで呼び出され(デフォルトではパラメーターなしの構造が使用されます)、親クラスオブジェクトが最初にインスタンス化され、サブクラスオブジェクトが後でインスタンス化されます。

1.親クラスはパラメーターなしの構築メソッドを提供します:

class A{
    public A(){		//父类提供的无参构造方法
        System.out.println("A类的构造方法");
    }
}
class B extends A{//继承自A类
    public B(){
        System.out.println("B类的构造方法");
    }
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        new B();
    }
}
//结果:
//A类的构造方法
//B类的构造方法

2.親クラスは、パラメーターなしの構築メソッドを提供しません。

class A{
    public A(String title){     //父类提供的有参构造方法
        System.out.println("A类的构造方法"+title);
    }
}
class B extends A{//继承自A类
    public B(String title){
        super(title);   //明确调用父类构造,否则将出现编译错误
        System.out.println("B类的构造方法");
    }
}
public class Test1_1_3_4 {
    public static void main(String args[]){
        new B("!!!");   //实例化子类对象
    }
}
//结果:
//A类的构造方法!!!
//B类的构造方法
49件の元の記事が公開されました 賞賛 された25件 1540訪問

おすすめ

転載: blog.csdn.net/weixin_45784666/article/details/104266605