されたsuper()
親のコンストラクタを呼び出すために使用?説明してくださいsuper()
。
されたsuper()
親のコンストラクタを呼び出すために使用?説明してくださいsuper()
。
回答:
super()
引数なしで親コンストラクターを呼び出します。
引数とともに使用することもできます。すなわち、super(argument1)
それはのタイプの1つのパラメータを受け付けるコンストラクタが呼び出されますargument1
(存在する場合)。
また、親からメソッドを呼び出すためにも使用できます。すなわちsuper.aMethod()
詳細とチュートリアルはこちら
super(...)
コンストラクタの最初のステートメントとしてのみ使用できます。
いくつかの事実:
super()
直接の親を呼び出すために使用されます。super()
インスタンスメンバー、つまりインスタンス変数とインスタンスメソッドで使用できます。super()
コンストラクター内で使用して、親クラスのコンストラクターを呼び出すことができます。では、これらのポイントを実際に実装してみましょうsuper()
。
プログラム1とプログラム2の違いを確認してください。ここでは、プログラム2 super()
がJavaでの最初のステートメントを証明しています。
プログラム1
class Base
{
int a = 100;
}
class Sup1 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup1().Show();
}
}
出力:
200
200
次に、プログラム2をチェックして、主な違いを理解してください。
プログラム2
class Base
{
int a = 100;
}
class Sup2 extends Base
{
int a = 200;
void Show()
{
System.out.println(super.a);
System.out.println(a);
}
public static void main(String[] args)
{
new Sup2().Show();
}
}
出力:
100
200
プログラム1では、出力は派生クラスのみでした。基本クラスと親クラスのどちらの変数も出力できませんでした。しかし、プログラム2では、出力を出力super()
するときに変数を使用し、派生クラスのa
変数a
の値を出力する代わりa
に、基本クラスの変数の値を出力しました。したがって、それがsuper()
直接の親を呼び出すために使用されることを証明します。
では、プログラム3とプログラム4の違いを確認してください。
プログラム3
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup3 extends Base
{
int a = 200;
void Show()
{
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup3().Show();
}
}
出力:
200
私たちが呼び出されるとここで出力は200されShow()
、Show()
派生クラスの関数が呼び出されました。しかしShow()
、親クラスの関数を呼び出したい場合はどうすればよいでしょうか。プログラム4で解決策を確認してください。
プログラム4
class Base
{
int a = 100;
void Show()
{
System.out.println(a);
}
}
class Sup4 extends Base
{
int a = 200;
void Show()
{
super.Show();
System.out.println(a);
}
public static void Main(String[] args)
{
new Sup4().Show();
}
}
出力:
100
200
ここでは2つの出力100と200を取得しています。Show()
派生クラスの関数が呼び出されると、最初Show()
に親クラスの関数が呼び出されます。これShow()
は、派生クラスのShow()
関数内で、super
関数名の前のキーワード。
super()
はキーワードではありません。これはコンストラクター呼び出しです。super
はキーワードであり、#1と#2はその定義でのみ意味があります。
ソース記事:Java:super()の呼び出し
はい。super(...)
スーパークラスのコンストラクタを呼び出します。
図:
class Animal {
public Animal(String arg) {
System.out.println("Constructing an animal: " + arg);
}
}
class Dog extends Animal {
public Dog() {
super("From Dog constructor");
System.out.println("Constructing a dog.");
}
}
public class Test {
public static void main(String[] a) {
new Dog();
}
}
プリント:
Constructing an animal: From Dog constructor
Constructing a dog.
super()
呼び出すと、引数を取らないスーパークラスのコンストラクターが呼び出されます。同様に、次のようにすると、引数1のコンストラクタが呼び出さsuper(arg1)
れます。
super()
されないため、有効な呼び出しではありません。
super()を使用して親コンストラクターを呼び出していますか?
はい。
PlsはSuper()について説明します。
super()
は、super
パラメーターなしの親コンストラクターを呼び出すキーワードの特別な使用法です。一般に、このsuper
キーワードは、オーバーライドされたメソッドの呼び出し、非表示フィールドへのアクセス、またはスーパークラスのコンストラクターの呼び出しに使用できます。
これが公式のチュートリアルです
super()
親コンストラクタsuper.myMethod()
を呼び出すために使用され、オーバーライドされたメソッドを呼び出すために使用されます。
引数なしのスーパーコンストラクターの呼び出しは、画面スペースとプログラマーの時間の浪費です。コンパイラーは、ユーザーが作成したかどうかにかかわらず、まったく同じコードを生成します。
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
ただsuper(); クラスのスーパークラスが存在する場合は、単独でデフォルトのコンストラクターを呼び出します。ただし、デフォルトのコンストラクタを自分で明示的に記述する必要があります。Javaを使用しない場合は、実装なしでJavaが生成され、super();を保存します。、ユニバーサルスーパークラスオブジェクトを参照しているため、サブクラスで呼び出すことはできません。
public class Alien{
public Alien(){ //Default constructor is written out by user
/** Implementation not shown…**/
}
}
public class WeirdAlien extends Alien{
public WeirdAlien(){
super(); //calls the default constructor in Alien.
}
}
私が理解したことなら何でもコードと共有したいと思います。
javaのsuperキーワードは、親クラスオブジェクトを参照するために使用される参照変数です。主に次のコンテキストで使用されます:-
1.変数でのスーパーの使用:
class Vehicle
{
int maxSpeed = 120;
}
/* sub class Car extending vehicle */
class Car extends Vehicle
{
int maxSpeed = 180;
void display()
{
/* print maxSpeed of base class (vehicle) */
System.out.println("Maximum Speed: " + super.maxSpeed);
}
}
/* Driver program to test */
class Test
{
public static void main(String[] args)
{
Car small = new Car();
small.display();
}
}
出力:-
Maximum Speed: 120
/* Base class Person */
class Person
{
void message()
{
System.out.println("This is person class");
}
}
/* Subclass Student */
class Student extends Person
{
void message()
{
System.out.println("This is student class");
}
// Note that display() is only in Student class
void display()
{
// will invoke or call current class message() method
message();
// will invoke or call parent class message() method
super.message();
}
}
/* Driver program to test */
class Test
{
public static void main(String args[])
{
Student s = new Student();
// calling display() of Student
s.display();
}
}
出力:-
This is student class
This is person class
3.コンストラクターでのスーパーの使用:
class Person
{
Person()
{
System.out.println("Person class Constructor");
}
}
/* subclass Student extending the Person class */
class Student extends Person
{
Student()
{
// invoke or call parent class constructor
super();
System.out.println("Student class Constructor");
}
}
/* Driver program to test*/
class Test
{
public static void main(String[] args)
{
Student s = new Student();
}
}
出力:-
Person class Constructor
Student class Constructor
コンストラクターコンストラク
ターでは、ドットなしでそれを使用して別のコンストラクターを呼び出すことができます。super
スーパークラスのコンストラクターを呼び出します。this
このクラスのコンストラクタを呼び出します:
public MyClass(int a) {
this(a, 5); // Here, I call another one of this class's constructors.
}
public MyClass(int a, int b) {
super(a, b); // Then, I call one of the superclass's constructors.
}
super
スーパークラスがそれ自体を初期化する必要がある場合に便利です。this
すべてのハード初期化コードを1つのコンストラクターで1回だけ記述し、他のすべての非常に記述しやすいコンストラクターからそれを呼び出すことができるので便利です。
メソッド
どのメソッドでも、ドットを使用して別のメソッドを呼び出すことができます。super.method()
スーパークラスのメソッドを呼び出します。this.method()
このクラスのメソッドを呼び出します:
public String toString() {
int hp = this.hitpoints(); // Calls the hitpoints method in this class
// for this object.
String name = super.name(); // Calls the name method in the superclass
// for this object.
return "[" + name + ": " + hp + " HP]";
}
super
特定のシナリオで役立ちます。クラスにスーパークラスと同じメソッドがある場合、Javaはクラスのメソッドが必要だと想定します。super
代わりにスーパークラスのメソッドを要求することができます。this
コードを読みやすくする方法としてのみ役立ちます。
スーパーキーワードは、スーパークラスのコンストラクタを呼び出すようにし、スーパークラスのメンバーを参照するために使用することができます
あなたが呼び出すと()スーパー右引数を指定して、我々は実際にコンストラクタ呼び出しボックスの変数の初期化、幅、高さや深さを、対応するパラメータの値を使用して、それに言及しました。付加価値の重みを初期化するだけです。必要に応じて、変数Boxをprivateとしてクラス化できます。Boxクラスのプライベート修飾子のフィールドに配置し、問題なくそれらにアクセスできることを確認します。
スーパークラスでは、オーバーロードされたバージョンのコンストラクターがいくつか存在する可能性があるため、異なるパラメーターを使用してメソッドsuper()を呼び出すことができます。プログラムは、指定された引数に一致するコンストラクターを実行します。
public class Box {
int width;
int height;
int depth;
Box(int w, int h, int d) {
width = w;
height = h;
depth = d;
}
public static void main(String[] args){
HeavyBox heavy = new HeavyBox(12, 32, 23, 13);
}
}
class HeavyBox extends Box {
int weight;
HeavyBox(int w, int h, int d, int m) {
//call the superclass constructor
super(w, h, d);
weight = m;
}
}
前述のように、デフォルトのコンストラクターの内部には、コンストラクターの最初の行で呼び出される暗黙の super()があります。
このsuper()は、クラス階層の最上位で始まるコンストラクタのチェーンを自動的に呼び出し、階層を下に移動します。
プログラムのクラス階層に3 つ以上のクラスがある場合、最上位クラスのデフォルトコンストラクターが最初に呼び出され ます。
これの例は次のとおりです。
class A {
A() {
System.out.println("Constructor A");
}
}
class B extends A{
public B() {
System.out.println("Constructor B");
}
}
class C extends B{
public C() {
System.out.println("Constructor C");
}
public static void main(String[] args) {
C c1 = new C();
}
}
上記は出力します:
Constructor A
Constructor B
Constructor C