![](/img/trans.png)
[英]Are there new arguments to use getters and setters since Java 8?
[英]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個類中實現多態性的用法不同,您需要重寫Parent
類setA()
方法才能做到這一點,您必須像這樣在Child類中調用super關鍵字
public void setA(A a)
{
super.setA(A a);
}
請注意,super僅在Child類的非靜態方法中可用
如果要在setA()
方法中設置b,則可以創建一個重載的方法,該方法意味着相同的名稱但不同的參數列表,這在本質上也是多態的
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.