programing

2개의 클래스에서 확장

javaba 2022. 7. 29. 23:56
반응형

2개의 클래스에서 확장

어떻게 하면 좋을까요?

public class Main extends ListActivity , ControlMenu 

또한 수업시간에 Control Menu라는 메뉴를 만들고 나머지 활동도 연장하고 있기 때문에 이 접근법이 괜찮은지 알고 싶습니다.

하나의 클래스만 확장할 수 있습니다.또, 다양한 소스로부터의 인터페이스를 실장합니다.

여러 클래스를 확장할 수 없습니다.생각할 수 있는 유일한 해결책은 두 클래스를 상속하는 것이 아니라 각 클래스의 내부 변수를 가지고 요청을 원하는 개체로 리디렉션하여 프록시를 더 많이 수행하는 것입니다.

 public class CustomActivity extends Activity {

     private AnotherClass mClass;

     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         mClass = new AnotherClass(this);
     }

     //Implement each method you want to use.
     public String getInfoFromOtherClass()
     {
        return mClass.getInfoFromOtherClass();
     }
 }

이게 내가 생각해낸 최고의 해결책이야두 클래스에서 모두 기능을 사용할 수 있으며 실제로는 한 클래스 유형만 사용할 수 있습니다.

단점은 깁스를 사용하여 내부 클래스의 Mold에 들어갈 수 없다는 것입니다.

내부 클래스(네스팅)를 사용하지 않는 이유

class A extends B {
    private class C extends D {
        //Classes A , B , C , D accessible here 
    }
}

다른 사람들이 말한 것처럼.아니, 그럴 수 없다.그러나, 몇년간, 복수의 인터페이스를 사용할 필요가 있다고 몇번이나 말해 왔지만, 실제로는 그 방법에 대해서는 언급하지 않았습니다.이게 도움이 됐으면 좋겠네요.

를 들어, '우리'가 있다고 .class Foo ★★★★★★★★★★★★★★★★★」class Bar 분 다 한 번 더 해 보고 을 하고 있습니다.class FooBar을 사용하다

public class FooBar extends Foo, Bar

사람들은 이미 어느 정도 이것에 대한 이유를 조사했다.instead, 을, 을라고 쓰세요.interfaces쌍방에 Foo ★★★★★★★★★★★★★★★★★」Bar예:

public interface FooInterface {

    public void methodA();

    public int methodB();

    //...
} 

public interface BarInterface {

    public int methodC(int i);

    //...
}

이제 ★★★★★★★★★★★★★★★★★★★★★.Foo ★★★★★★★★★★★★★★★★★」Bar상대 인터페이스를 실장합니다.

public class Foo implements FooInterface { /*...*/ }

public class Bar implements BarInterface { /*...*/ }

이제 ㅇㅇ, ㅇㅇ, ㅇㅇ, ㅇ, ㅇ, ㅇ, ㅇ,class FooBar 다 할 수 FooInterface ★★★★★★★★★★★★★★★★★」BarInterfaceFoo ★★★★★★★★★★★★★★★★★」Bar오브젝트 및 메서드를 그대로 통과시킵니다.

public class FooBar implements FooInterface, BarInterface {

    Foo myFoo;
    Bar myBar;

    // You can have the FooBar constructor require the arguments for both
    //  the Foo and the Bar constructors
    public FooBar(int x, int y, int z){
        myFoo = new Foo(x);
        myBar = new Bar(y, z);
    }

    // Or have the Foo and Bar objects passed right in
    public FooBar(Foo newFoo, Bar newBar){
        myFoo = newFoo;
        myBar = newBar;
    }

    public void methodA(){
        myFoo.methodA();
    }

    public int methodB(){
        return myFoo.methodB();
    }

    public int methodC(int i){
        return myBar.methodC(i);
    }

    //...

}

은 이 방법이 좋다는 입니다.FooBar이 양자의 FooInterface ★★★★★★★★★★★★★★★★★」BarInterface은 이것이 을 의미합니다.

FooInterface testFoo;
testFoo = new FooBar(a, b, c);
testFoo = new Foo(a);

BarInterface testBar;
testBar = new FooBar(a, b, c);
testBar = new Bar(b, c);

이것으로, 복수의 내선 번호가 아니고, 인터페이스를 사용하는 방법이 명확해졌으면 합니다.내가 몇 년 늦더라도.

인터페이스를 사용하는 것이 좋습니다.일반적으로 다중 상속은 다이아몬드 문제로 인해 좋지 않습니다.

abstract class A {
 abstract string foo();
}

class B extends A {
 string foo () { return "bar"; }
}

class C extends A  {
 string foo() {return "baz"; }
}

class D extends B, C {
 string foo() { return super.foo(); } //What do I do? Which method should I call?
}

C++ 등에는 몇 가지 해결 방법이 있습니다.

string foo() { return B::foo(); }

Java는 인터페이스만 사용합니다.

Java Trails는 인터페이스에 대한 훌륭한 소개가 있다: http://download.oracle.com/javase/tutorial/java/concepts/interface.html Android API의 뉘앙스에 대해 알아보기 전에 아마도 그것을 따라하는 것이 좋을 것이다.

다른 자바에서는 을 할 수 . 2라고 하면 .A )의 B 합니다.BInterface알 수 ) , (이름만 들어도 수 있다) 라고 하면,Main extends A implements BInterface에서 클래스할 수 있습니다.B 모든 할 수 있도록 하겠습니다.BInterface하는 B.

'가 '있음' .Main은...A단, ,가 .B, 이 BInterface의 서 AB 오브젝트에 직접 액세스 할 수 있는 방법을 제공합니다.

인터페이스를 만듭니다.Java에는 여러 개의 상속이 없습니다.

http://csis.pace.edu/ ~ bergin / vergin / vergin / verginus . vergin

Java는 다중 상속을 지원하지 않지만 둘 이상의 인터페이스를 구현할 수 있습니다.

네, 슬란다우 말이 맞아요Java에서는 여러 클래스에서 확장할 수 없습니다.

이 것은 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★.public class Main extends ListActivity implements ControlMenu★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

도움이 됐으면 좋겠다.

다른 대안과 마찬가지로 메서드의 기본 구현이 있는 인터페이스를 사용할 수 있습니다.그것은 물론 당신이 무엇을 하고 싶은지에 달려 있다.

예를 들어 추상 클래스 및 인터페이스를 만들 수 있습니다.

public abstract class FatherClass {

    abstract void methodInherit() {
        //... do something
    }
}

public interface InterfaceWithDefaultsMethods {
    default void anotherMethod() {
        //... do something
        //... maybe a method with a callable for call another function.
    }
}

그 후 두 가지 클래스를 모두 확장 및 구현하여 두 가지 방법을 모두 사용할 수 있습니다.

public class extends FatherClass implements InterfaceWithDefaultsMethods {

    void methode() {
        methodInherit();
        anotherMethod();
    }
}

이게 도움이 되길...

Java에서는 여러 클래스에서 확장할 수 없습니다.죽음의 다이아몬드를 막기 위해!

가능하다.

public class ParallaxViewController<T extends View & Parallaxor> extends ParallaxController<T> implements AbsListView.OnScrollListener {

//blah
}

자바 개발자들은 다중 상속의 문제가 이점보다 크다고 판단하여 다중 상속을 포함하지 않았습니다.다중 상속(이중 다이아몬드 문제)의 가장 큰 이슈 중 하나에 대한 내용은 여기에서 확인할 수 있습니다.

가장 유사한 두 가지 개념은 인터페이스 구현이며 현재 클래스의 멤버로 다른 클래스의 오브젝트를 포함합니다.인터페이스에서 기본 방식을 사용하는 것은 여러 상속과 거의 동일하지만 기본 방식만 사용하여 인터페이스를 사용하는 것은 잘못된 관행으로 간주됩니다.

Java에서는 다중 상속을 수행할 수 없습니다. 인터페이스를 사용하는 것을 고려하십시오.

interface I1 {}
interface I2 {}
class C implements I1, I2 {}

또는 내부 클래스:

class Outer {
    class Inner1 extends Class1 {}
    class Inner2 extends Class2 {}
}

언급URL : https://stackoverflow.com/questions/5836662/extending-from-two-classes

반응형