簡體   English   中英

Java:使用具有多態性的getter和setter方法

[英]Java: use getters and setters with polymorphism

例如,我有這些課程:

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;
    }
}

在我的主類中,我想使用多態性: Parent p = new Child(); 我需要在此p元素上同時使用setA和setB函數。 做這個的最好方式是什么? 由於多態性,我現在僅看到setA函數-那么我是否必須重寫子類中的setter和getter? 推薦嗎?

Java使用動態綁定來決定可訪問的方法,因此,當您要訪問另一個類的方法時,必須將其強制轉換為該類。 在您要訪問Child類的方法的情況下,可以將obj顯式轉換為Child,然后調用您的方法:

     Parent p = new Child();
    ((Child) p).getB();
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;


            }
        }
    }
}

多態性表示一個方法名稱,但是在這2個類中實現多態性的用法不同,您需要重寫ParentsetA()方法才能做到這一點,您必須像這樣在Child類中調用super關鍵字

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

}

請注意,super僅在Child類的非靜態方法中可用

如果要在setA()方法中設置b,則可以創建一個重載的方法,該方法意味着相同的名稱但不同的參數列表,這在本質上也是多態的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM