그래서 Java GUI 계산기를 만들려고하고 있는데 한 클래스가 다른 클래스를 확장하는 시나리오에서 차이가 있을지 궁금해지기 시작했습니다. 확장 된 함수에서 functionname 대신 super.functionname을 호출합니다. 수업.부모 생성자를 호출 Java
class frame extends JFrame{
public buttonframe(){
// any difference between this.add.. or super.add..
}
}
나는 몇 가지 실험을하기 위해 몇 가지 수업을 만들었으며, 나는 꽤 이해하지 못하는 것을 발견했다.
class A{
public A(){
System.out.println("A");
h();
}
public void h(){
String className = this.getClass().getName();
System.out.println(className);
}
}
class B extends A{
public B(){
System.out.println("B");
h();
}
}
은 실행 :
public static void main(String[] args){
new A();
new B();
}
출력 생성합니다 :
> A calculator.A
> A calculator.B
> B calculator.B
내가 확장 클래스는 부모 클래스의 생성자를 호출 것이라는 점을 알고있다, 그러나 왜 결과 계산기를 생산 않습니다 .B (비록 내가 왜 이것을해야하는지 모르겠지만, A classname = new B();
은 그것과 관련이 있다고 가정한다.) calculator.A 대신에 두 번째 출력 라인에서 생성자 인 calle 클래스 A에서 d?
편집 :
class A{
public A(){
//Can I instantiate a new B() and somehow ouput "A"?
//I can do it using A.hs(); but can I do it:
//Using the method h() but with a specific keyword infront of h() so
//that it always refers to the method h() of the class A.
h();
}
public static void hs(){
System.out.println("A");
}
public void h(){
System.out.println("A");
}
}
class B extends A{
public B(){
h();
}
public void h(){
System.out.println("B");
}
}
. 나는 내가 "이 클래스를 충분하게 확장하지 못했다"는 것을 깨닫는다. 왜냐하면이 키워드를 사용할 때마다 같은 클래스 내에서만 사용되기 때문에 this 키워드를 오브젝트 자체 대신 클래스와 연관시키기 시작했다. –
내가 궁금해하는 한 가지가 있습니다. A 클래스가 A를 인쇄하고 B 클래스가 B를 인쇄하는 classname = new B()는 A() 생성자에서 h() 함수가 실행되고 두 함수 모두 h()를가집니다. Ah()는 A의 생성자에 사용됩니까? 그래서 새로운 B()가 A를 출력 할 것입니다. 저는 이것을 사용할 수 없으며 A()에서 super를 사용할 수 없습니다. 나는 정적 함수를 사용할 수 있다는 것을 알았지 만 내가 할 수있는 유일한 것인가? 나는 Java에 익숙하지 만 Csharp에서 약간의 경험이있다. –
방금 물었던 것, 나에게 분명하지 않다. A 또는 B 중 하나의 인스턴스를 참조해야 할 경우 클래스를 만들거나 정적 참조를 사용해야합니다. – nullpointer