目次
継承
継承を使用する理由
その他
方法重写
final 关键字的使用
ホームページ Java &#&チュートリアル Javaの継承とは何ですか? Java で継承を使用するにはどうすればよいですか?

Javaの継承とは何ですか? Java で継承を使用するにはどうすればよいですか?

Oct 20, 2018 pm 06:01 PM
java 継承する

この記事では、Java 継承とは何かについて説明します。 Java で継承を使用するにはどうすればよいですか? 、初心者に継承の使用方法を教え、継承の概念を理解させます。アクセス修飾子とfinalキーワードの使い方をマスターしましょう。困っている友人は参考にしていただければ幸いです。

継承

継承を使用する理由

まず、これら 2 つのクラスを見てみましょう:

public class Teacher {
    private int teachingAge;
    private String name;
    private int age;
    
    public void teach() {
        
    }
    public void seyHi() {
        System.out.println("我是:"+this.name);
    }
}
ログイン後にコピー
public class Student {
    private int studentNo;
    private String name;
    private int age;
    
    public void learn() {
        
    }
    public void seyHi() {
        System.out.println("我是:"+this.name);
    }
}
ログイン後にコピー

Student クラスと Teacher クラスには、いくつかの類似点 プロパティとメソッド、これらは重複コードです。プログラム内に多数のクラスがある場合、大量の重複コードが生成されます。これらの繰り返しコードを抽出して他のクラスで使用して、単純化することはできますか?つまり、 を使用して を継承します。

継承の最適化を使用した後:

継承パッケージを作成します

親クラス: (パブリック コード クラス)

package inherit;

public class People {
    private String name;
    private int age;
    
    public void sayHi() {
        System.out.println("我是:"+this.name);
    }

    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;
    }
    
}
ログイン後にコピー

サブクラス: Student.java

package inherit;

public class Student extends People{
    private int studentNo;
    public void learn() {
        System.out.println("学习课程");
    }
    public int getStudentNo() {
        return studentNo;
    }
    public void setStudentNo(int studentNo) {
        this.studentNo = studentNo;
    }
}
ログイン後にコピー

サブクラス: Teacher.java

package inherit;

public class Teacher extends People{
    private int teachingAge;
    
    public void teach() {
        System.out.println("教授课程");
    }
    
    public int getTeachingAge() {
        return teachingAge;
    }

    public void setTeachingAge(int teachingAge) {
        this.teachingAge = teachingAge;
    }
    
}
ログイン後にコピー

テスト クラス:

package inherit;

public class TestInherit {
    public static void main(String[] args) {
        //创建Student对象
        Student stu=new Student();
        stu.setName("张三");//父类中继承过来的方法
        stu.learn();//子类中特有的方法
        stu.sayHi();
        //创建Teacher对象
        Teacher teacher=new Teacher();
        teacher.setName("汤尼");
        teacher.setTeachingAge(2);//子类中特有的方法
        teacher.sayHi();
    }
}
ログイン後にコピー

上記のコード例を観察すると、次のことがわかります。

1. サブクラスのすべてのパブリック コードは次のとおりです。親クラス

#2に配置されます。サブクラスは独自のメソッドと属性を持つことができます

#3。サブクラスが親クラスを継承すると、親クラスの属性とメソッドを持つようになります。

4. コードを均一に変更しやすくするために、パブリック コードを親クラスに配置します。

#継承された構文

##キーワード:

extends

1. 親クラスを作成します<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>public class 父类{ //公共的属性和方法 }</pre><div class="contentsignin">ログイン後にコピー</div></div>2. サブクラスを作成し、親クラスを継承します

#
public class 子类 extends 父类{
    //子类特有的属性和方法
}
ログイン後にコピー

#サブクラスは 1 つの親クラスのみを継承します

サブクラスは親クラスのメンバーにアクセスできます

サブクラスが親クラスのメンバーにアクセスしたい場合は、

super
キーワードを使用する必要があります。親クラス構造にアクセスするための親クラス オブジェクトを表します。メソッド:

super();//访问无参构造
super(参数);//访问有参构造
ログイン後にコピー

親クラス属性にアクセス:

super.name;
ログイン後にコピー
親クラス メソッドにアクセス:
super.print();
ログイン後にコピー
親クラスのコンストラクターにアクセスします。子クラスのコンストラクター メソッドで呼び出す必要があります。最初の文である必要があります。

super はサブクラスのメソッドとコンストラクターにのみ使用できます

super は親クラスのプライベート メンバーにアクセスできません

ノックノック: 親クラスのメンバーにアクセスします

パッケージ visitparent を作成し、レポートの下に次のクラスを作成します

親クラス
package visitparent;

public class Animal {
    private String name;
    private int legs;
    
    public Animal() {
        this.name="无名";
        this.legs=4;
    }
    public Animal(String name,int legs) {
        this.name=name;
        this.legs=legs;
    }
    
    public void eat(String food) {
        System.out.println(name+" 吃食物:"+food);
    }

    public String getName() {
        return name;
    }

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

    public int getLegs() {
        return legs;
    }

    public void setLegs(int legs) {
        this.legs = legs;
    }
    
}
ログイン後にコピー
サブクラス

package visitparent;

public class Cat extends Animal{
    private String hairColor;//毛发颜色
    private int age;
    
    public Cat () {
        super();//调用父类无参
    }
    public Cat(String name,int legs,String hairColor,int age) {
        super(name, legs);//这里调用相当于重用父类构造方法了
        this.hairColor=hairColor;
        this.age=age;
        //super(name, legs);//去掉注释试试
        //this.name="无名";//去掉注释试试
    }
    public void catchMouse() {
        System.out.println(super.getName()+":抓老鼠");
    }
    
    public void paly() {
        System.out.println(super.getName()+" 玩累了。");
        super.eat("小鱼干");
    }

    public String getHairColor() {
        return hairColor;
    }

    public void setHairColor(String hairColor) {
        this.hairColor = hairColor;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    
}
ログイン後にコピー

サブクラスは親クラスのプライベート メンバーを継承できません


サブクラスは、親クラスのプライベート メンバーを継承できません。デフォルトのアクセス権限を使用します (デフォルトのアクセス権限ではアクセス修飾子は書き込まれません)

サブクラスは親クラスのコンストラクタを継承できません

多重継承の実行プロセス

サブクラスを作成するとき、親クラスは何をしますか?

以下の 3 つのクラスを作成して、クラス C がクラス B を継承し、クラス B がクラス A を継承します。

A.java

public class A {
    public A() {
        System.out.println("A类的无参构造函数执行");
    }
}
ログイン後にコピー
B.java

public class B extends A{
    public B() {
        System.out.println("B类的无参构造函数执行");
    }
}
ログイン後にコピー

C.java

public class C extends B{
    public C() {
        System.out.println("C类的无参构造函数执行");
    }
}
ログイン後にコピー

TestRunFlow.java テスト クラス、実行結果の表示

public class TestRunFlow {
    public static void main(String[] args) {
        C c=new C();
    }
}
ログイン後にコピー

実行結果は次のとおりです。

クラス A のパラメータなしコンストラクタが実行されます。

クラス B のパラメータなしコンストラクタが実行されます。

クラス C のパラメータなしコンストラクタが実行されます。

サブクラス コンストラクターがスーパーを通じて親クラスの対応するコンストラクターを明示的に呼び出す場合、親クラスのパラメーターなしのコンストラクターは実行されません。メソッド

最上位の親クラスのパラメータなしのコンストラクタが実行されるまで、親クラスのパラメータなしのコンストラクタを呼び出します

上記のルールに従って、次のコードをコンパイルして渡すことができるかどうかを判断してください。
#親クラス

public class Pet {
    private String name;
    public Pet(String name) {
        this.name=name;
    }
}
ログイン後にコピー

サブクラス
public class Dog extends Pet{
}
ログイン後にコピー
答えは「ノー」です。親クラスにはパラメータ化されたコンストラクタのみがあり、パラメータなしのコンストラクタはありません。デフォルトでは、クラス内のコードには暗黙的なパラメータなしのコンストラクタがあり、サブクラスのパラメータなしのコンストラクタは、デフォルトで親クラスのパラメータなしのコンストラクタを呼び出しません。親クラスであるため、子クラスでエラーが報告されます。

解決策: 1. 親クラスにパラメーターなしのコンストラクターを明示的に追加します。 2. サブクラスのコンストラクターで親クラスのパラメーター化されたコンストラクターを明示的に呼び出します。
java のアクセス修飾子

protected アクセス修飾子は、変更後に、このクラス、サブクラス、および同じパッケージからプロパティとメソッドにアクセスできます。

#アクセス修飾子

このクラス

同じパッケージ

サブクラス

その他

#プライベート##デフォルト (フレンドリー)√√√√√

方法重写

在"继承优化后"的代码中,Teacher 继承了 People 类,(忘记代码可以翻回去再看一遍) People 类中有个一个打招呼的方法 sayHi() 用于输出人的名字,但是 Teacher 调用这个方法并不能打印出 Teacher 的属性 teachingAge 的值,但是我们还想用这个方法实现这个功能,应该怎么办呢?

我们可以使用 方法重写 解决这个问题,修改子类 Teacher 中的代码,下面看一下使用方法重写后的效果。

Teacher.java

package inherit;

public class Teacher extends People{
    //省略其他属性
    
    @Override
    public void sayHi() {
        System.out.println("我是:"+super.getName()+" ,从事教育行业 "+this.teachingAge+" 年了。");
    }

    //省略其他方法、getter、setter
}
ログイン後にコピー

在 Eclipse 中重写某方法的快捷键是 Alt+Shift+S+V ,按完后选择要重写的方法

在 Idea 中重写某方法的快捷键是 Ctrl+O ,按完后选择要重写的方法

@Override 注解的作用, 用来检测是否符合重写规则,不符合重写规则将报错,这个注解可以不写

构造方法不能重写,因为构造方法不能被继承

方法重写的规则:

1.方法名相同

2.参数列表相同

3.返回值类型相同或者是其子类

4.访问权限不能严于父类

final 关键字的使用

1.final 修饰变量后变为常量

private static final long serialVersionUID = -6849794470754667710L;
ログイン後にコピー

2.final 修饰类后,该类不能被继承

package java.lang;
public final class Math {
    //省略属性和方法……
}
ログイン後にコピー

3.final 修饰方法后,该方法不能被重写

public final void teach() {
        System.out.println("教授课程");
    }
ログイン後にコピー

4.final 修饰创建的对象后,该对像不能再次实例化(可以修改属性)

final Teacher teacher=new Teacher();
teacher.setName("汤尼");
//teacher=new Teacher();//去掉注释试试
ログイン後にコピー

String 类就是一个典型的被 final 修饰的类

以上がJavaの継承とは何ですか? Java で継承を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Javaの完全数 Javaの完全数 Aug 30, 2024 pm 04:28 PM

Java における完全数のガイド。ここでは、定義、Java で完全数を確認する方法、コード実装の例について説明します。

ジャワのウェカ ジャワのウェカ Aug 30, 2024 pm 04:28 PM

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

Javaのスミス番号 Javaのスミス番号 Aug 30, 2024 pm 04:28 PM

Java のスミス番号のガイド。ここでは定義、Java でスミス番号を確認する方法について説明します。コード実装の例。

Java Springのインタビューの質問 Java Springのインタビューの質問 Aug 30, 2024 pm 04:29 PM

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8 Stream Foreachから休憩または戻ってきますか? Java 8 Stream Foreachから休憩または戻ってきますか? Feb 07, 2025 pm 12:09 PM

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプ Java での日付までのタイムスタンプ Aug 30, 2024 pm 04:28 PM

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルの量を見つけるためのJavaプログラム カプセルの量を見つけるためのJavaプログラム Feb 07, 2025 am 11:37 AM

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4

未来を創る: まったくの初心者のための Java プログラミング 未来を創る: まったくの初心者のための Java プログラミング Oct 13, 2024 pm 01:32 PM

Java は、初心者と経験豊富な開発者の両方が学習できる人気のあるプログラミング言語です。このチュートリアルは基本的な概念から始まり、高度なトピックに進みます。 Java Development Kit をインストールしたら、簡単な「Hello, World!」プログラムを作成してプログラミングを練習できます。コードを理解したら、コマンド プロンプトを使用してプログラムをコンパイルして実行すると、コンソールに「Hello, World!」と出力されます。 Java の学習はプログラミングの旅の始まりであり、習熟が深まるにつれて、より複雑なアプリケーションを作成できるようになります。

See all articles



#保護済み

public