黑马程序员技术交流社区
标题:
子类继承父类的的问题
[打印本页]
作者:
兜兜转转
时间:
2013-8-26 01:38
标题:
子类继承父类的的问题
本帖最后由 forward 于 2013-8-26 21:40 编辑
public class AbstractDeno2
{
public static void main(String[] args)
{
Manager m = new Manager("Ansen","S13006540",8900.0 , 10000.0 );
m.working();
System.out.println(m.getName()+" "+m.getWorkid()+" "+m.getSalary()+" "+m.getBonus());
}
}
/*
假如在开发一个系统时需要对员工进行建模,员工有3个属性:
姓名、工号以及工资,经理也是员工,除了含有员工的属性外。
还有一个奖金属性,请使用继承的思想设计出员工类和经理类,
要求类中提供必要的方法进行属性访问。
*/
abstract class Employee
{
private String name;
private String workid;
private double salary;
public abstract void working();
public Employee(String name , String workid,double salary)
{
this.name = name ;
this.workid =workid;
this.salary = salary;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getWorkid()
{
return workid;
}
public void setWorkid(String workid)
{
this.workid = workid;
}
public double getSalary()
{
return salary;
}
public void setSalary(double salary)
{
this.salary = salary;
}
}
class General extends Employee
{
public General(String name , String workid, double salary)
{
super(name , workid, salary);
}
public void working()
{
System.out.println("我是个普通的工人,我正在车间工作!");
}
}
class Manager extends Employee
{
private double bonus;
public Manager(String name , String workid, double salary, double bonus)
{
super(name , workid, salary);
this.bonus = bonus;
}
public void working()
{
System.out.println("我是公司经理,正在和各位主管们开会!");
}
public double getBonus()
{
return bonus;
}
public void setBonus(double bonus)
{
this.bonus = bonus;
}
}
子类继承父类时候,能不能继承父类的私有属性和方法?可是为什么上面的代码能执行成功呢?
作者:
gulup
时间:
2013-8-26 02:25
又到大半夜了。。又到了赚技术分的时间了。。
本来写好了一大段的,但是手贱不小心把网页关了。害我重写。。
private等4个关键字,字面意思是“访问权限控制符”。并不关继承什么事。它只是管访问权限的。
在大多数的java课程,java文献中都说到”子类拥有所有父类属性和方法“。
但是因为其属性是private的,私有化的,即便你是子类,也不能直接访问我的属性。
这段代码:
System.out.println(m.getName()+" "+m.getWorkid()+" "+m.getSalary()+" "+m.getBonus());
之所以能够正常运行,是因为使用了public定义的,公共的get方法。使得其能够返回来需要的属性。
如果你直接使用m.name这样的形式的话,就绝对报错咯。
如果你连get方法都定义成private的了,那就真的没得搞的了。
打个最生动的比喻,小明的爸爸拥有一大笔财产,用保险柜藏起来了(私有化),小明继承了爸爸的所有东西,包括他的一大笔财产,但是,这笔财产仍然是在保险柜里面的(访问权限仍然是private)。这时候儿子要用这笔钱了,不能直接用。只能用一把叫做getMoney的工具来拿钱(就是public的get方法)。
最终这个getMoney就给他返回来了财产了。小明就可以去买东西了。。。七喜可乐七喜可乐。
作者:
javamov
时间:
2013-8-26 04:26
子类继承父类时候,能不能继承父类的私有属性和方法?可是为什么上面的代码能执行成功呢?
私有的属性和方法是不提供别人操作的,
但如果你提高操作的接口,也就是如果你封装了对象,并且提供其他对象访问的接口。
那么私有的属性和方法就可以通过接口供其他对象操作,但其他对象是不能直接操作私有的属性和方法的。
就好比电脑主机,你可以使用接口,但你不能直接触摸主板。这样既方便又安全。--java的封装性。
作者:
.....淡定
时间:
2013-8-26 08:17
私有的属性和方法不能被继承。
作者:
兜兜转转
时间:
2013-8-26 09:26
.....淡定 发表于 2013-8-26 08:17
私有的属性和方法不能被继承。
public General(String name , String workid, double salary)
{
super(name , workid, salary);
}
如果不能继承,我这里明显是用父类的构造方法为 name 和workid, salay初始化赋值了呀?
super(name , workid, salary);不就是这样吗? this.name = name .........吗?
应该是可以继承,但不能直接操作吧?
作者:
穿靴子的猫
时间:
2013-8-26 11:03
私有的是不可以访问的 只有公有的才可以,属性是私有的,但是你提供了通道了呀,一个是有参数的构造,这个通道可以给赋值,还有公有的getter setter 方法 也是可以赋值的 私有属性是不让你随意赋值,所以一般都是在有参构造啊 或者get set方法中进行控制,这就是封装,把属性隐藏起来
作者:
xinchenglong
时间:
2013-8-26 15:25
1、是的,除了JAVA中,子类继承父类的所有方法和属性(构造方法要用关键字super([参数])调用)
另外,当父类的方法或属性被声明为private(私有的)时,子类也是不可以继承的。
2、继承是JAVA中一个重要的特色,便于程序的编写,提高代码的重用性。
private 的属性和方法是不能被继承的。
能继承public,default,protected 的属性和方法。
因为父类就是子类的模板,当然能继承,但是private只有对类本身才具有可见性,所以子类不能继承其方法和属性。
作者:
杨增坤
时间:
2013-8-26 21:03
楼主,如果问题解决了,请把问题的未解决更改为已解决,谢谢合作,
更改方法:
http://bbs.itheima.com/thread-71308-1-1.html
作者:
兜兜转转
时间:
2013-8-27 07:57
我知道可以提供公开的方法进行对私有成员的操作和设置,但是我问的是,这几个私有属性是不是已经被子类继承过来了呢?
public General(String name , String workid, double salary)
{
super(name , workid, salary);//这个到底是给父类对象赋值还是子类对象属性赋值?
}
System.out.println(m.getName()+" "+m.getWorkid()+" "+m.getSalary()+" "+m.getBonus());这个有是打印父类对象的属性值还是子类的呢?
可以麻烦把内存图画画,让小弟看看?我觉得是可以继承,不能直接访问和操作。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2