为了账号安全,请及时绑定邮箱和手机立即绑定

为什么在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


正在回答

5 回答

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下载
官方微信