super()
親コンストラクターを呼び出すために使用されますか?説明してくださいsuper()
。
17 に答える
super()
引数なしで親コンストラクターを呼び出します。
引数とともに使用することもできます。super(argument1)
つまり、(存在する場合)のタイプの1つのパラメーターを受け入れるコンストラクターを呼び出しますargument1
。
また、親からメソッドを呼び出すために使用することもできます。つまりsuper.aMethod()
詳細とチュートリアルはこちら
いくつかの事実:
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();
}
}
出力:
200200
_
次に、プログラム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();
}
}
出力:
100200
_
プログラム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();
}
}
出力:
100200
_
ここでは、100と200の2つの出力が得られますShow()
。派生クラスの関数が呼び出されると、最初Show()
に親クラスの関数が呼び出されます。これは、派生クラスのShow()
関数内で、次のように入力して親クラスの関数を呼び出したためShow()
です。関数名の前のsuper
キーワード。
ソース記事: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()は親コンストラクターを呼び出すために使用されますか?
はい。
plsはSuper()について説明します。
super()
super
パラメータのない親コンストラクタを呼び出すキーワードの特別な使用法です。一般に、このsuper
キーワードは、オーバーライドされたメソッドの呼び出し、非表示フィールドへのアクセス、またはスーパークラスのコンストラクターの呼び出しに使用できます。
これが公式チュートリアルです
引数なしのスーパーコンストラクターを呼び出すことは、画面スペースとプログラマーの時間の無駄です。コンパイラは、記述したかどうかに関係なく、まったく同じコードを生成します。
class Explicit() {
Explicit() {
super();
}
}
class Implicit {
Implicit() {
}
}
はい、super()
(小文字で)親クラスのコンストラクターを呼び出します。引数を含めることができます。super(foo, bar)
super
スーパークラスのメソッドを呼び出すためのメソッドで使用できるキーワードもあります
「Javasuper」のクイックグーグルはこれになります
それは正しいです。Superは、親コンストラクターを呼び出すために使用されます。したがって、次のようなコードブロックがあるとします。
class A{
int n;
public A(int x){
n = x;
}
}
class B extends A{
int m;
public B(int x, int y){
super(x);
m = y;
}
}
次に、メンバー変数nに値を割り当てることができます。
私はすべての答えを見てきました。しかし、誰もが1つの非常に重要な点に言及するのを忘れていました。
super()は、コンストラクターの最初の行で呼び出すか、使用する必要があります。
ただsuper(); クラスのスーパークラスが存在する場合は、単独でデフォルトのコンストラクターを呼び出します。ただし、デフォルトのコンストラクターを自分で明示的に作成する必要があります。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.
}
}
たとえば、セレンの自動化では、次のように親のコンストラクターを使用できるPageObjectがあります。
public class DeveloperSteps extends ScenarioSteps {
public DeveloperSteps(Pages pages) {
super(pages);
}........
私が理解したことは何でもコードと共有したいと思います。
javaのsuperキーワードは、親クラスオブジェクトを参照するために使用される参照変数です。これは主に次のコンテキストで使用されます。-
1.変数でのsuperの使用:
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.コンストラクターでのsuperの使用:
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は何に使えますか?
スーパークラスメンバーへのアクセス
メソッドがそのスーパークラスのメソッドの一部をオーバーライドする場合、次のsuper
ようなキーワードを使用してオーバーライドされたメソッドを呼び出すことができます。super.methodName();
スーパークラスコンストラクターの呼び出し
コンストラクターがスーパークラスコンストラクターを明示的に呼び出さない場合、Javaコンパイラーは、スーパークラスの引数なしコンストラクターへの呼び出しを自動的に挿入します。スーパークラスに引数なしのコンストラクターがない場合、コンパイル時エラーが発生します。
以下のコードを見てください。
class Creature {
public Creature() {
system.out.println("Creature non argument constructor.");
}
}
class Animal extends Creature {
public Animal (String name) {
System.out.println("Animal one argument constructor");
}
public Animal (Stirng name,int age) {
this(name);
system.out.println("Animal two arguments constructor");
}
}
class Wolf extends Animal {
public Wolf() {
super("tigerwang",33);
system.out.println("Wolf non argument constructor");
}
public static void main(string[] args) {
new Wolf();
}
}
オブジェクトを作成するとき、JVMは常に最初に継承ツリーの最上位層のクラスでコンストラクターを実行し、次に継承ツリーの最後まで実行します。これが発生する可能性がある理由は、Javaコンパイラーが自動的にスーパークラスの引数なしコンストラクターを呼び出します。スーパークラスに引数なしコンストラクターがなく、サブクラスがスーパークラスで実行されるコンストラクターを明示的に指定していない場合、コンパイル時エラーが発生します。 。
上記のコードでは、Wolfオブジェクトを正常に作成するには、クラスのコンストラクターを実行する必要があります。そのプロセス中に、Animalクラスの2つの引数のコンストラクターが呼び出されます。同時に、明示的に1つを呼び出します。 -同じクラスのargu-constructorとone-argu-constructorは、Creatureクラスのnon-argu-constructorを暗黙的に呼び出し、non-argu-constructorは、Objectクラスの空のコンストラクターを再び暗黙的に呼び出します。
コンストラクターコンストラク
ターでは、ドットなしで別のコンストラクターを呼び出すために使用できます。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
コードを読みやすくする方法としてのみ役立ちます。
superキーワードを使用して、スーパークラスコンストラクターを呼び出したり、スーパークラスのメンバーを参照したりできます。
正しい引数を指定してsuper()を呼び出すと、実際にはコンストラクターBoxを呼び出します。これは、対応するパラメーターの値を使用して参照される変数width、height、depthを初期化します。付加価値のある重みを初期化するだけです。必要に応じて、変数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()があります。
この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
The super keyword in Java is a reference variable that is used to refer to the immediate parent class object.
Javaスーパーキーワードの使用法
superは、直接の親クラスのインスタンス変数を参照するために使用できます。
superを使用して、直接の親クラスメソッドを呼び出すことができます。
super()を使用して、直接の親クラスコンストラクターを呼び出すことができます。