【问题标题】:Java: use getters and setters with polymorphismJava:使用具有多态性的 getter 和 setter
【发布时间】:2016-12-08 05:12:29
【问题描述】:

例如,我有这些课程:

public class A {
}

public class B {
}

public class Parent {
    private A a;
    public A getA() {
        return a;
    }
    public void setA(A a) {
        this.a = a;
    }
}

public class Child extends Parent {
    private B b;
    public B getB() {
        return b;
    }
    public void setB(B b) {
        this.b = b;
    }
}

在我的 Main 类中,我想使用多态性:Parent p = new Child();。 我需要在这个 p 元素上使用 setA 和 setB 函数。做这个的最好方式是什么?由于多态性,我现在只看到 setA 函数 - 所以我必须覆盖子类中的 setter 和 getter 吗?推荐吗?

【问题讨论】:

  • 这个问题将被关闭,因为它位于 CR 上,因为它是存根代码。请不要迁移它。

标签: java inheritance polymorphism overriding setter


【解决方案1】:

Java 使用动态绑定来决定可以访问哪些方法,因此当您想要访问另一个类的方法时,您必须将其强制转换为该类。在您想要访问 Child 类的方法的情况下,您可以将 obj 显式转换为 Child,然后调用您的方法:

     Parent p = new Child();
    ((Child) p).getB();

【讨论】:

【解决方案2】:

多态性表示一个方法名称,但不同的用途来实现这 2 个类中的多态性,您需要覆盖您的 Parentclass setA() 方法来做到这一点,您必须在您的 Child 中调用 super 关键字这样的课

public void setA(A a)
{
  super.setA(A a);

}

注意 super 只在子类的非静态方法中可用

如果你想在 setA() 方法中设置你的 b,你可以创建一个重载方法,意思是同名但不同的参数列表,这在本质上也是多态的

【讨论】:

    【解决方案3】:
    import java.util.Scanner;
    
    public class Calculator {
    public static void main(String []args){
    
    for(int count=1;count<=200;count++){
        Scanner x=new Scanner(System.in);
    
        System.out.println("1 for sum\n2 for sub\n3 for div\n4 for multi");
        int a=x.nextInt();
    
        double fnum;
        double snum;
        switch(a){
    
        case 1:
                System.out.println("enter first number");
                fnum=x.nextDouble();
                System.out.println("enter second number");
                snum=x.nextDouble();
                Sum s=new Sum(fnum,snum);
                System.out.println("your Sum is "+s.add(fnum, snum));
                break;
    
        case 2:
                System.out.println("enter first number");
                fnum=x.nextDouble();
                System.out.println("enter second number");
                snum=x.nextDouble();
                Sub d=new Sub(fnum,snum);
                System.out.println("the difference is "+d.min(fnum, snum));
                break;
    
        case 3:
                System.out.println("enter first number");
                fnum=x.nextDouble();
                System.out.println("enter second number");
                snum=x.nextDouble();
                Div c=new Div(fnum,snum);
                System.out.println("the qoutient is "+c.div(fnum, snum));
                break;  
        case 4:
                System.out.println("enter first number");
                fnum=x.nextDouble();
                System.out.println("enter second number");
                snum=x.nextDouble();
                Mult m=new Mult(fnum,snum);
                System.out.println("the product is "+m.tim(fnum, snum));
                break;
        default:
                System.out.println("invalid input");
                x.next();
                break;
    
    
                }
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多