有参的构造方法执行了?

来源:7-1 什么是 Java 中的封装

wshyzx

2016-06-30 12:13

按照这节演示来看,是不是phone2创建时有参构造方法就执行了,但是却不能生效,就是并不能传参。没有传参怎么能说执行了呢?这中间的点在哪里?

如果是Telephone phone2=new Telephone(1.0f,1.8f,4.0f);程序还是会返回:

您输入的参数有问题,自动赋值4.0f

带参的构造方法Telephone执行了

就是说1.0f传给了screen,但是却不能输出,会报错说screen不能被访问。这中间发生了什么?

而且1.0f应该不能传给screen啊

package com.imooc;


public class Telephone {

private float screen;//通过private修改属性的可见性,目的是封装

private float cpu;

private float mem;

public float getScreen(){

return screen;

}

public void setScreen(float newScreen){

if(newScreen<4.0f){

System.out.println("您输入的参数有问题,自动赋值4.0f");

screen=4.0f;

}else{

screen=newScreen;

}

}

public Telephone(){

System.out.println("无参的构造方法执行了");

}

public Telephone(float newScreen,float newCpu,float newMem){

if(newScreen<4.0f){

System.out.println("您输入的参数有问题,自动赋值4.0f");

screen=4.0f;

}else{

screen=newScreen;

}

cpu=newCpu;

mem=newMem;

System.out.println("带参的构造方法Telephone执行了");

}


}

分界线========================================================


package com.imooc;


public class InitialTelephone {


public static void main(String[] args) {

// TODO Auto-generated method stub

//通过无参的构造方法创建对象

Telephone phone=new Telephone();

//通过带参的构造方法创建对象 并给对象中的实例变量赋初值

Telephone phone2=new Telephone(1.0f,1.8f,4.0f);

/*phone2.screen=6.0f;

System.out.println(phone2.screen);封装后不能直接访问数据,故失效,隐去*/

phone.setScreen(1.0f);

System.out.println("screen:"+phone.getScreen());

phone2.setScreen(6.0f);

System.out.println("screen:"+phone2.getScreen());


}


}


写回答 关注

1回答

  • 傲娇的小乌鸦
    2016-06-30 15:38:35

    是不是没用到this,值传到其他变量了,贴段代码看看?

    wshyzx

    代码贴上了,你看看

    2016-07-02 10:12:16

    共 1 条回复 >

Java入门第二季 升级版

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

530105 学习 · 6086 问题

查看课程

相似问题