java中继承中:父类的private的东西能否被继承?
我用下面这个方法能证明是能继承的吗?
class Animal{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class Dog extends Animal{
}
public class Demo { public Demo() {
}
public static void main (String[] args) {
Dog d=new Dog();
d.setName("dog");
System.out.println (d.getName());
}
}d.setName("dog") 明显赋值进去了
如果不能继承 那"dog"往哪搁?
找了很多资料,不晓得是咋回事
顺带问下C#中是可以继承的吧[在winform中利用子类窗体继承父类的窗体证明(父类的私有控件(包含一个容器)是被继承下来了,因为在子类中无法往该容器中拖控件),这里不阐述]
我用下面这个方法能证明是能继承的吗?
class Animal{
private String name;
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
}
class Dog extends Animal{
}
public class Demo { public Demo() {
}
public static void main (String[] args) {
Dog d=new Dog();
d.setName("dog");
System.out.println (d.getName());
}
}d.setName("dog") 明显赋值进去了
如果不能继承 那"dog"往哪搁?
找了很多资料,不晓得是咋回事
顺带问下C#中是可以继承的吧[在winform中利用子类窗体继承父类的窗体证明(父类的私有控件(包含一个容器)是被继承下来了,因为在子类中无法往该容器中拖控件),这里不阐述]
只是子类中不能直接访问父类的 private 属性和方法,只能访问public的属性和方法。
只是父类中不能直接访问private这个在所有的面向对象语言中都是一样的。
子类不能使用 name="Dog"
只能使用 pubblic 方法
而你调用的是public方法操作private的属性是可以 这就是封装的意义
不能直接调用父类的private方法 意思是你不能这样用d.name="dog"和System.out.println(d.name);
如果属性是protected和public的话就可以直接用d.name = "dog"了
调用的是父类中的setName,set的也是父类里的name
测试一下
public class Demo { public Demo() {
}
public static void main (String[] args) {
Dog d=new Dog();
d.setName("dog");
System.out.println (d.getName());
System.out.println(d.getClass().getDeclaredFields().length);
}
}
结果
dog
0
说明DOG类中没有任何字段,所以说并不是说DOG里面有一个name,而是Set进它的父类的name
所以都说不能继承private的属性和方法
也就是子类中包含了父类
但private继承下来了不能使用
怎么就没有人回答呢?
再用的时候就可以直接认为它是不能被继承的就行了
new的子类对象 怎么放父类里了
public class TestA {
public static void main(String[] args) {
Dog d = new Dog();
d.setName("dog");
System.out.println(d.getName());
System.out.println(d.name);
}
}
class Animal{
private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
class Dog extends Animal{
public String name;
}
输出 dog
null
Dog类中的属性并没有被赋值
方法!然后提供一个默认无参的构造方法成为一个JavaBean!
不能让其他类来直接调用或更改animal中的私有属性,而只能通过调用其public的set和get方法来进行animal中私有属性的操作