zoukankan      html  css  js  c++  java
  • Java面向接口编程小例子 2

        //防火门,防盗门,防火防盗门,门,防盗,防火
        interface Dfire {
            int Dnum = 100;
            void fire();
        }
        interface Dtheif {
            int Dnum = 100;
            void theif();
        }
    
        abstract class Door {
            abstract void open();
            abstract void close();
        }
    
        class DfireDoor extends Door implements Dfire {
             void open() {
                System.out.println("防火门开了");
            }
             void close() {
                System.out.println("防火门关了");
            }
    
            public void fire() {
                System.out.println("我能防火");
            }
        }
    
        class DtheifDoor extends Door implements Dtheif {
            public void open() {
                System.out.println("防盗门开了");
            }
    
            public void close() {
                System.out.println("防盗门关了");
            }
    
            public void theif() {
                System.out.println("我能防盗");
            }
        }
    
        class DallDoor extends Door implements Dfire,Dtheif {
            void open() {
                System.out.println("防火防盗门开了");
            }
    
            void close() {
                System.out.println("防火防盗门关了");
            }
    
            public void theif() {
                System.out.println("我能防盗");
            }
    
            public void fire() {
                System.out.println("我能防火");
            }
        }
    
        class App2 {
            public static void main(String[] args) {
                Door d1 = new DfireDoor();
                d1.open();
                d1.close();
                DfireDoor dd1 = new DfireDoor();
                dd1.fire();
    
                Door d2 = new DtheifDoor();
                d2.open();
                d2.close();
    
                Door d3 = new DallDoor();
                DallDoor dd3 = new DallDoor();
                d3.open();
                d3.close();
                
                dd3.theif();
            }
        }
    

    一开始在实现借口的类那里的方法没有加public,导致继承中权限降低,出错

    接口中所有的方法与变量都默认是 public 的,在接口中可以不写出来。但在实现类中,如果不明写的话,就变成了 friend  的了,也就是 “包访问权限”。而JAVA又规定,在实现接口或者覆写父类方法时,不能降低父类方法的访问权限,但是可以提高。也就是可以按照  friend protected public 来提高访问权限,但不能按照 public protected friend 来降低访问权限。

    然后还有一个问题就是用Door类型的d1去引用DoorDfire型,可以调用Door中重写的open和close方法,但是这样声明的d1虽然引用的是DfireDoor还是不能调用fire接口的fire方法

    这个问题看在明天的讲解中能不能解决

    -------------------------------------------------------------------------------------------

    使用父类类型的引用指向子类的对象是不能去调用接口的方法,因为在父类中也没有声明接口的方法,只声明了将要被子类重写的方法,不能用是正常的。这也是这样声明的弊端,但好处就是兼容性更好,这点在后面会遇到很多。

    然后补充点

    多态:

    一、使用父类类型的引用指向子类的对象; 
    二、该引用只能调用父类中定义的方法和变量; 
    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用) 
    四、变量不能被重写(覆盖),”重写“的概念只针对方法,如果在子类中”重写“了父类中的变量,那么在编译时会报错。

  • 相关阅读:
    jQuery杂项方法
    nodeJS实现路由功能
    nodeJS之HTTP
    nodeJS之TCP模块net
    nodeJS之事件events
    NodeJS之queryString
    chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行
    DeepMind已将AlphaGo引入多领域 Al泡沫严重
    学习Linux的正确姿势
    现在90,00后经常上哪些网站?喜欢看啥网站?
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/7256674.html
Copyright © 2011-2022 走看看