问答详情
源自:10-3 Java 中的抽象类

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


提问者:爱摔跤的小男孩 2018-09-22 21:50

个回答

  • 慕沐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了                               

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

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