代码如下:
public class Interfaces {
    public static void main(String[] args) {
        Dog d = new Dog(3);
        d.enjoy();
        Valueable v = (Valueable)d;
        System.out.println(d.valueable());
        d.setname("aaaa");
        System.out.println(d.getname());
        System.out.println(d.getf()+"\n");    }
}interface Valueable {
    public int valueable();
}
interface Protectedable {
    public void protectedable();
}abstract class Animal{
    private String name;    abstract void enjoy();
    public void setname(String name) {
        this.name = name;
    }
    public String getname(){
        return this.name;
    }
}class Dog extends Animal implements Valueable,Protectedable {
    private int age;    Dog(int age){
        this.age = age;
        //this.name = name;
    }    public void enjoy() {
        System.out.println("狗叫");
    }
    public int valueable() {
        return 100;
    }
    public void protectedable() {
        System.out.println("值钱的东西");
    }
    public String getf() {
        return super.getname();
    }
}那子类 d对象里面有没有 name 属性? 不然访问的name 是从哪里来的?
搞不明白了...

解决方案 »

  1.   

    java中子类本来就可以通过继承公共方法访问父类的私有变量啊,就算不是父子关系,一个类也可以通过另一个类的公共方法访问它的私有变量了。
    像我们经常用的实体Bean都是这么实现的啊,,,,,
      

  2.   

    但一般的那个 是 先New出来的对象,之后用对象的getname,取得name的值 那个name值是对象的属性啊  现在子类继承之后 Name没有怎么 调用的啊
      

  3.   

    那个 name 不是它的。如果是它的,它就可以调用了。class Dog extends Animal implements Valueable,Protectedable { 
        private int age;     Dog(int age){ 
            this.age = age; 
            this.name = "aaaa"; 
        }     public void enjoy() { 
            System.out.println("狗叫"); 
        } 
        public int valueable() { 
            return 100; 
        } 
        public void protectedable() { 
            System.out.println("值钱的东西"); 
        } 
        public String getf() { 
            return super.getname(); 
        } 

    代码中的红色部分编译不让通过,就是说子类没有 name 属性,它无权调用。
      

  4.   

    既然提供了public的方法去访问私有变量,说明可以间接地访问私有变量,但是直接访问是不行的
      

  5.   

    不一定的,父类如果有setName方法,就可以修改了
      

  6.   

    java的子类有一个隐含的父类的对象的引用。在调用d.setName()方法时,d自动向上转型成了Animal,所以这里调用的是Animal的setName方法,Animal的方法当然能访问它自己的私有属性啊。另一方面Animal类将属性name封装了起来,子类并不能看见这个属性,但Animal类通过一个公有方法使子类可以操作这个属性。不知道我理解的对不对。
      

  7.   

    javaBean理解清楚这个就不难了.
      

  8.   

    基础    继承 是继承父类 所有的方法方法属性  除去private 修饰的