되어 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)
여기서 우리는 두 개의 출력, 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()
를 호출하는 데 사용되고 재정의 된 메서드를 호출하는 데 사용됩니다.
나는 모든 답을 보았습니다. 그러나 모두가 한 가지 중요한 점을 언급하는 것을 잊었습니다.
생성자의 첫 번째 줄에서 super ()를 호출하거나 사용해야합니다.
그냥 super (); 클래스의 슈퍼 클래스가 존재하는 경우, 단독으로 디폴트 생성자를 호출합니다. 그러나 기본 생성자를 직접 작성해야합니다. 자바가 구현하지 않고 자바를 생성하지 않는다면, 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. 변수와 함께 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
생성자와 함께 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
슈퍼 클래스에서 생성자를 호출합니다. 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
생성자 중 하나에서 모든 하드 초기화 코드를 한 번만 작성하고 작성하기가 훨씬 쉬운 다른 모든 생성자에서 호출 할 수 있습니다.
메소드
모든 메소드에서 점과 함께 사용하여 다른 메소드를 호출 할 수 있습니다. 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 () 는 클래스 계층의 최상위에서 시작 하여 일련의 생성자를 자동으로 호출하고 계층 아래로 이동합니다.
이 있다면 두 개 이상의 클래스 프로그램의 클래스 계층 구조에서 상위 클래스의 기본 생성자는 얻을 것 이라고 첫째 .
다음은 이에 대한 예입니다.
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