亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么在main函數中給子類賦值 運行結果仍然為在子類中給屬性賦值的結果


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


正在回答

4 回答

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

}


0 回復 有任何疑惑可以回復我~

應該是你創建的si和obj1都是分開的內存段,你si引用對象賦值跟Obj1沒有關系,,你用Obj1賦值再執行操作就可以了

0 回復 有任何疑惑可以回復我~

對象用錯了,應該是si.primeter(); si.acreage();就對了,你那種引用是不對的,直接Rcerangle si = new Rcerangle();就ok了 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

0 回復 有任何疑惑可以回復我~
#1

愛摔跤的小男孩 提問者

那我父類調用子類方法豈不是毫無意義 Shape obj1 = new Rcerangle();
2018-09-23 回復 有任何疑惑可以回復我~
#2

愛摔跤的小男孩 提問者 回復 愛摔跤的小男孩 提問者

不對 是重寫
2018-09-23 回復 有任何疑惑可以回復我~
#3

愛摔跤的小男孩 提問者 回復 愛摔跤的小男孩 提問者

在父類中定義屬性 在主函數中就可以通過修改父類的屬性值,數值就對了。
2018-09-23 回復 有任何疑惑可以回復我~
#4

慕沐2182660 回復 愛摔跤的小男孩 提問者

也就是說不能間接修改屬性吧,這方面我也不太清楚。。。回來我也試一下
2018-09-23 回復 有任何疑惑可以回復我~
查看1條回復

你在子類的函數中,沒有使用對象的屬性,只是在子類的函數里用higher * longer是不行的,應該用this.higher吧,不然這個只是個普通變量,而不是你的obj1對象的一個屬性

0 回復 有任何疑惑可以回復我~
#1

愛摔跤的小男孩 提問者

不行啊 我只是想要在main函數中修改子函數中屬性的值 難道需要構造函數賦值么
2018-09-23 回復 有任何疑惑可以回復我~
#2

慕沐2182660 回復 愛摔跤的小男孩 提問者

在主函數直接對它進行應該是沒錯的,結果不對應該是之后的函數沒有使用你更改后的值,要是還不對你在給我看下你改之后的代碼
2018-09-23 回復 有任何疑惑可以回復我~
#3

愛摔跤的小男孩 提問者 回復 慕沐2182660

我現在是用set給子類賦值,運行結果還是不是使用我更改后的值 主函數的部分代碼是這樣的 Shape obj1 = new Rcerangle(); Rcerangle si = new Rcerangle(); si.setHigher(4); si.setLonger(5); obj1.primeter(); obj1.acreage();
2018-09-23 回復 有任何疑惑可以回復我~
#4

愛摔跤的小男孩 提問者 回復 慕沐2182660

public void primeter() { // TODO Auto-generated method stub double primeter = 2*(this.higher+this.longer); System.out.println("該矩形的周長為:" + primeter); }
2018-09-23 回復 有任何疑惑可以回復我~
#5

愛摔跤的小男孩 提問者 回復 慕沐2182660

還是說先是父類引用子類對象,導致子類無法賦值么
2018-09-23 回復 有任何疑惑可以回復我~
#6

慕沐2182660 回復 愛摔跤的小男孩 提問者

關于面積計算的代碼你給我發一下我看看,你也可以調試下,來看看對象是不是附上值
2018-09-23 回復 有任何疑惑可以回復我~
#7

愛摔跤的小男孩 提問者 回復 慕沐2182660

public void acreage() { // TODO Auto-generated method stub double acreage = this.higher * this.longer; System.out.println("該矩形的面積為:" + acreage); }
2018-09-23 回復 有任何疑惑可以回復我~
查看4條回復

舉報

0/150
提交
取消

為什么在main函數中給子類賦值 運行結果仍然為在子類中給屬性賦值的結果

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號