• 接口


    >>>>>>>>>>>>>>>>>>>>

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
             接口实现和类继承的规则不同,为了数据的安全,继承时一个类只有一个直接父类,也就是单继承,但是一个类可以实现多个接口,接口弥补了类的不能多继承缺点,继承和接口的双重设计既保持了类的数据安全也变相实现了多继承。
               Java接口的方法只能是抽象的和公开的,Java接口不能有构造器,Java接口可以有public、静态的和final属性。
     

    在语法上,抽象类和接口有着以下不同:

    1.abstract class在Java语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。 继承抽象类使用的是extends关键字,实现接口使用的是implements关键字,继承写在前面,实现接口写在后面。如果实现多个接口,中间用逗号分隔。

    例: 1 public class Main extends JApplet implements ActionListener, Runnable 

    2.在abstract class中可以有自己的数据成员,也可以有非abstract的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

    3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

    4.实现接口的类必须实现其中的所有方法,继承自抽象类的子类实现所有的抽象方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

    5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

    6.抽象类中的变量默认具有 friendly权限,其值可以在子类中重新定义,也可以重新赋值。

    7.接口中的方法默认都是 public abstract 类型的。

     
    代码实例:
    package SecondWeekSixthDay;
    
    /*interface:接口*/
    //创建一个Car,有两个行为,分别是获取汽车的名字和获取汽车的价格。
    interface Car{
        /*声明两个公共属性。共子类使用*/
        //汽车名称
        public String getName();//获取汽车的名字
        //获得汽车价格
        public int getPrince();//获取汽车的价格
        /*属性只能用public修饰*/
        /*属性只能用public修饰*/
        /*属性只能用public修饰*/
        /*重要的事说三遍*/
    }
    
    
    //实现类:BMW 宝马车,实现类必须要“重写”接口Car的所有行为
    /*implements:实现、装备*/
    /*宝马类有一个car的接口*/
    class BMW implements Car{
    
            @Override/*重写:汽车名称*/
            public String getName() {
                // TODO Auto-generated method stub
                return "我是BMW宝马车";/*返回值*/
            }
    
            @Override/*重写:获得汽车价格*/
            public int getPrince() {
                // TODO Auto-generated method stub
                return 300000;/*返回值*/
            }
    
        }
         
         
    //实现:必须要重写接口Car的所有行为
    class Cherry implements Car{
    /*奇瑞Cherry类有一个接口Car*/
            @Override
            public String getName() {
                // TODO Auto-generated method stub
                return "我是Cherry奇瑞车";
            }
    
            @Override
            public int getPrince() {
                // TODO Auto-generated method stub
                return 20000;
            }
    
        }
    
    
    //汽车出售商
    class CarShop {/*CarShop*/
        private int money = 0;//卖出汽车的收入
    
        /*申明一个int类型属性:sellCar-->销售汽车*/
        public int sellCar(Car car){//卖车的行为方法,返回收入
            
            int price = car.getPrince();
            return money=money+price;}
    
        public int getmoney(){
            return money;}
    }
    
        public class TestCarShop {/*类体*/
        //计算卖车的收入
        public static void main(String[] args) {/*main入口*/
            CarShop carShop =new CarShop();
            
            Car car1=new BMW();
            carShop.sellCar(car1);
            
            Car car2=new Cherry();
            carShop.sellCar(car2);
            
            int counMoney=carShop.getmoney();
            System.out.println("汽车出售的价格是:"+counMoney);
    
            
            
        }
        
    }
     
  • 相关阅读:
    Linux 多进程锁的几种实现方案
    Linux man手册没有pthread_mutex_init的解决办法
    IP地址结构信息与字符串相互转化:inet_pton和inet_ntop, etc.
    Linux 将计算md5值功能做成md5命令
    Unix/Linux inet守护进程
    Unix/Linux syslogd守护进程 & 日志记录syslog
    UNP 学习笔记 #11 名字与地址转换
    git 使用总结
    AUPE 输出致标准错误的出错函数分析与实现 err_sys, err_quit, err_doit etc.
    Linux C常见数I/O函数比较: printf, sprintf, fprintf, write...
  • 原文地址:https://www.cnblogs.com/xuehx/p/6144458.html
Copyright © 2020-2023  润新知