标题:接口实现中的小小问题,觉得很郁闷。。。
只看楼主
enjoy迷星
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2011-11-5
结帖率:80%
已结贴  问题点数:5 回复次数:4 
接口实现中的小小问题,觉得很郁闷。。。
interface Singer {
    public static final int id = 0 ;  //可省略写成 int id = 0 ;
    public void sing() ;
    public void sleep() ;
}

interface Painter {
    public void paint() ;
    public void eat() ;
}

class Student implements Singer {
    public void sing() {
        System.out.println("student is singing ...") ;
    }
   
    public void sleep() {
        System.out.println("student is sleeping ...") ;
    }
   
    public void study() {
        System.out.println("student is studying ...") ;
    }
}

class Teacher implements Singer , Painter {
    public void sing() {
        System.out.println("teacher is singing ...") ;
    }
   
    public void sleep() {
        System.out.println("teacher is sleeping ...") ;
    }
   
    public void paint() {
        System.out.println("teacher is painting ...") ;
    }
   
    public void eat() {
        System.out.println("teacher is eatting ...") ;
    }
   
    public void teach() {
        System.out.println("teacher is teach ...") ;
    }
}

public class TestInterface {
    public static void main(String args[]) {
        Singer s1 = new Student() ;
        Painter p1 = new Teacher() ;   
        s1.sing() ;
        s1.sleep() ;
        p1.paint() ;
        p1.eat() ;
        
        Student s2 =  (Student)s1 ;
        s2.sing() ;
        s2.sleep() ;
        s2.study() ;
        
        Teacher p2 = (Teacher)p1 ;
        p2.sing() ;
        p2.sleep() ;
        p2.paint() ;
        p2.eat() ;
        p2.teach() ;
        
        System.out.println("s1.id = " + s1.id) ;
        System.out.println("s2.id = " + s2.id) ;
        //System.out.println("p1.id = " + p1.id) ;  //此句加上编译就不能通过,
                                                    //为什么System.out.println("s1.id = " + s1.id) ;可以呢,求解!!!
        System.out.println("p2.id = " + p2.id) ;
    }
}

提示错误为:
TestInterface.java:71: 错误: 找不到符号
                System.out.println("p1.id = " + p1.id) ;
                                                  ^
  符号:   变量 id
  位置: 类型为Painter的变量 p1
1 个错误
搜索更多相关主题的帖子: 接口 interface singing public 
2011-11-15 21:39
yhlvht
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:36
帖 子:707
专家分:4405
注 册:2011-9-30
得分:5 
因为p1虽然实际指向的是Teacher类,但是p1的类型为Painter,Painter接口中是没有id属性的,所以p1.id,编译器在Painter找不到id,报错
p2为(Teacher)p1,即p1强转为Teacher类,因为p1实际上就是Teacher类,所以可以强转,那么实际上p2跟p1从是完全一样的,但p2是Teacher类的引用,Teacher类实现了Singer接口,所以p2.id是可以的.
s1本身就是Singer接口的引用,而id就是定义在Singer中,所以s1.id完全没有问题
2011-11-17 11:46
niu91
Rank: 2
等 级:论坛游民
帖 子:64
专家分:44
注 册:2009-7-25
得分:0 
顶2楼
2011-11-18 08:09
enjoy迷星
Rank: 2
等 级:论坛游民
帖 子:18
专家分:42
注 册:2011-11-5
得分:0 
回复 2楼 yhlvht
不好意思,我忘记了“Painter接口中是没有id属性的”,呵呵,谢谢提醒啊!!!
2011-11-20 12:40
bcc317786807
Rank: 1
等 级:新手上路
帖 子:4
专家分:5
注 册:2011-11-19
得分:0 
。。
2011-11-20 16:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-355344-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.131942 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved