为什么在main函数中给子类赋值 运行结果仍然为在子类中给属性赋值的结果

来源:10-3 Java 中的抽象类

爱摔跤的小男孩

2018-09-22 21:50


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回答

  • 慕沐2182660
    2018-09-23 11:05:22
    已采纳

    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 14:34:20

    应该是你创建的si和obj1都是分开的内存段,你si引用对象赋值跟Obj1没有关系,,你用Obj1赋值再执行操作就可以了

  • 慕沐2182660
    2018-09-23 11:47:40

    对象用错了,应该是si.primeter(); si.acreage();就对了,你那种引用是不对的,直接Rcerangle si = new Rcerangle();就ok了                               

    慕沐2182... 回复爱摔跤的小男...

    也就是说不能间接修改属性吧,这方面我也不太清楚。。。回来我也试一下

    2018-09-23 12:14:01

    共 4 条回复 >

  • 慕沐2182660
    2018-09-23 10:44:57

    你在子类的函数中,没有使用对象的属性,只是在子类的函数里用higher * longer是不行的,应该用this.higher吧,不然这个只是个普通变量,而不是你的obj1对象的一个属性

    爱摔跤的小男... 回复慕沐2182...

    public void acreage() { // TODO Auto-generated method stub double acreage = this.higher * this.longer; System.out.println("该矩形的面积为:" + acreage); }

    2018-09-23 11:42:32

    共 7 条回复 >

Java入门第二季 升级版

课程升级!以终为始告别枯燥,在开发和重构中体会Java面向对象编程的奥妙

530553 学习 · 6091 问题

查看课程

相似问题