為什么在main函數(shù)中給子類賦值 運(yùn)行結(jié)果仍然為在子類中給屬性賦值的結(jié)果
package com.shape;
public class Rcerangle extends Shape {
public double higher = 5;
public double longer = 4;
@Override
public ?void primeter() {
// TODO Auto-generated method stub
double primeter = 2*(higher+longer);
System.out.println("該矩形的周長為:" + primeter);
}
@Override
public ? void ?acreage() {
// TODO Auto-generated method stub
double acreage = higher * longer;
System.out.println("該矩形的面積為:" + acreage);
}
}
package com.shape;
//import java.util.Scanner;;
public class Text {
public static void main(String[] args) {
// TODO Auto-generated method stub
Shape obj1 = new Rcerangle();
Rcerangle si = new Rcerangle();
//Scanner input = new Scanner(System.in);
//System.out.println(obj.longer=input.nextDouble());
//System.out.println(obj.higher=input.nextDouble());
si.longer = 7;
obj1.primeter();
obj1.acreage();
Shape obj2 = new Cirlce();
obj2.primeter();
obj2.acreage();
}
該矩形的周長為:18.0
該矩形的面積為:20.0
該圓形的周長為:25.12
該圓形的面積為:50.24
2018-09-23
package obtest;
public class Circle extends Shape {
?? ?int R;
?? ?double pi = 3.14;
?? ?@Override
?? ?public void perimeter() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?double preimeter;
?? ??? ?preimeter = this.R*pi*2;
?? ??? ?System.out.println("這個矩形的面積:"+preimeter);
?? ?}
?? ?@Override
?? ?public void acreage() {
?? ??? ?// TODO Auto-generated method stub
?? ??? ?double acreage;
?? ??? ?acreage = (this.R+this.R)*pi;
?? ??? ?System.out.println("這個矩形的面積:"+acreage);
?? ?}
}
2018-10-01
應(yīng)該是你創(chuàng)建的si和obj1都是分開的內(nèi)存段,你si引用對象賦值跟Obj1沒有關(guān)系,,你用Obj1賦值再執(zhí)行操作就可以了
2018-09-23
對象用錯了,應(yīng)該是si.primeter(); si.acreage();就對了,你那種引用是不對的,直接Rcerangle si = new Rcerangle();就ok了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
2018-09-23
你在子類的函數(shù)中,沒有使用對象的屬性,只是在子類的函數(shù)里用higher * longer是不行的,應(yīng)該用this.higher吧,不然這個只是個普通變量,而不是你的obj1對象的一個屬性