• Java笔记(09):面向对象--接口


    1、接口的成员特点:

     1 /*
     2     接口的特点:
     3         A:接口用关键字interface表示    
     4             interface 接口名 {}
     5         B:类实现接口用implements表示
     6             class 类名 implements 接口名 {}
     7         C:接口不能实例化
     8             那么,接口如何实例化呢?
     9             按照多态的方式来实例化。
    10         D:接口的子类
    11             a:可以是抽象类。但是意义不大。
    12             b:可以是具体类。要重写接口中的所有抽象方法。(推荐方案)
    13     
    14     由此可见:
    15         A:具体类多态(几乎没有)
    16         B:抽象类多态(常用)
    17         C:接口多态(最常用)
    18 */
    19 //定义动物培训接口
    20 interface AnimalTrain {
    21     public abstract void jump();
    22 }
    23 
    24 //抽象类实现接口
    25 abstract class Dog implements AnimalTrain {
    26 }
    27 
    28 //具体类实现接口
    29 class Cat implements AnimalTrain {
    30     public void jump() {
    31         System.out.println("猫可以跳高了");
    32     }
    33 }
    34 
    35 class InterfaceDemo {
    36     public static void main(String[] args) {
    37         //AnimalTrain是抽象的; 无法实例化
    38         //AnimalTrain at = new AnimalTrain();
    39         //at.jump();
    40         
    41         AnimalTrain at = new Cat();
    42         at.jump();
    43     }
    44 }

    2、类与类、类与接口、接口与接口的关系:

     1 /*
     2     类与类:
     3         继承关系,只能单继承,可以多层继承。
     4     类与接口:
     5         实现关系,可以单实现,也可以多实现。
     6         并且还可以在继承一个类的同时实现多个接口。
     7     接口与接口:
     8         继承关系,可以单继承,也可以多继承。
     9 */
    10 interface Father {
    11     public abstract void show();
    12 }
    13 
    14 interface Mother {
    15     public abstract void show2();
    16 }
    17 
    18 interface Sister extends Father,Mother {
    19 
    20 }
    21 
    22 //class Son implements Father,Mother //多实现
    23 class Son extends Object implements Father,Mother {
    24     public void show() {
    25         System.out.println("show son");
    26     }
    27     
    28     public void show2() {
    29         System.out.println("show2 son");
    30     }
    31 }
    32 
    33 class InterfaceDemo3 {
    34     public static void main(String[] args) {
    35         //创建对象
    36         Father f = new Son();
    37         f.show();
    38         //f.show2(); //报错
    39     
    40         Mother m = new Son();
    41         //m.show(); //报错
    42         m.show2();
    43     }
    44 }

    3、抽象类和接口的区别

    A:成员区别
    抽象类:
    成员变量:可以变量,也可以常量
    构造方法:有
    成员方法:可以抽象,也可以非抽象
    接口:
    成员变量:只可以常量
    成员方法:只可以抽象

    B:关系区别
    类与类
    继承,单继承
    类与接口
    实现,单实现,多实现
    接口与接口
    继承,单继承,多继承

    C:设计理念区别
    抽象类 被继承体现的是:”is a”的关系。抽象类中定义的是该继承体系的共性功能。
    接口 被实现体现的是:”like a”的关系。接口中定义的是该继承体系的扩展功能。

    4、猫狗案例:

      1 /*
      2     猫狗案例,加入跳高的额外功能
      3     
      4     分析:从具体到抽象
      5         猫:
      6             姓名,年龄
      7             吃饭,睡觉
      8         狗:
      9             姓名,年龄
     10             吃饭,睡觉
     11             
     12         由于有共性功能,所以,我们抽取出一个父类:
     13         动物:
     14             姓名,年龄
     15             吃饭();
     16             睡觉(){}
     17             
     18         猫:继承自动物
     19         狗:继承自动物
     20         
     21         跳高的额外功能是一个新的扩展功能,所以我们要定义一个接口
     22         接口:
     23             跳高
     24             
     25         部分猫:实现跳高
     26         部分狗:实现跳高
     27     实现;
     28         从抽象到具体
     29         
     30     使用:
     31         使用具体类
     32 */
     33 //定义跳高接口
     34 interface Jumpping {
     35     //跳高功能
     36     public abstract void jump();
     37 }
     38 
     39 //定义抽象类
     40 abstract class Animal {
     41     //姓名
     42     private String name;
     43     //年龄
     44     private int age;
     45     
     46     public Animal() {}
     47     
     48     public Animal(String name,int age) {
     49         this.name = name;
     50         this.age = age;
     51     }
     52     
     53     public String getName() {
     54         return name;
     55     }
     56     
     57     public void setName(String name) {
     58         this.name = name;
     59     }
     60     
     61     public int getAge() {
     62         return age;
     63     }
     64     
     65     public void setAge(int age) {
     66         this.age = age;
     67     }
     68     
     69     //吃饭();
     70     public abstract void eat();
     71     
     72     //睡觉(){}
     73     public void sleep() {
     74         System.out.println("睡觉觉了");
     75     }
     76 }
     77 
     78 //具体猫类
     79 class Cat extends Animal {
     80     public Cat(){}
     81     
     82     public Cat(String name,int age) {
     83         super(name,age);
     84     }
     85     
     86     public void eat() {
     87         System.out.println("猫吃鱼");
     88     }
     89 }
     90 
     91 //具体狗类
     92 class Dog extends Animal {
     93     public Dog(){}
     94     
     95     public Dog(String name,int age) {
     96         super(name,age);
     97     }
     98     
     99     public void eat() {
    100         System.out.println("狗吃肉");
    101     }
    102 }
    103 
    104 //有跳高功能的猫
    105 class JumpCat extends Cat implements Jumpping {
    106     public JumpCat() {}
    107     
    108     public JumpCat(String name,int age) {
    109         super(name,age);
    110     }
    111 
    112     public void jump() {
    113         System.out.println("跳高猫");
    114     }
    115 }
    116 
    117 //有跳高功能的狗
    118 class JumpDog extends Dog implements Jumpping {
    119     public JumpDog() {}
    120     
    121     public JumpDog(String name,int age) {
    122         super(name,age);
    123     }
    124 
    125     public void jump() {
    126         System.out.println("跳高狗");
    127     }
    128 }
    129 
    130 class InterfaceTest {
    131     public static void main(String[] args) {
    132         //定义跳高猫并测试
    133         JumpCat jc = new JumpCat();
    134         jc.setName("哆啦A梦");
    135         jc.setAge(3);
    136         System.out.println(jc.getName()+"---"+jc.getAge());
    137         jc.eat();
    138         jc.sleep();
    139         jc.jump();
    140         System.out.println("-----------------");
    141         
    142         JumpCat jc2 = new JumpCat("加菲猫",2);
    143         System.out.println(jc2.getName()+"---"+jc2.getAge());
    144         jc2.eat();
    145         jc2.sleep();
    146         jc2.jump();
    147     
    148     }
    149 }
    如欢如殇 授以青春鲜活肢体奔忙 如思如忘 驱以老朽深沉灵魂冥想 始自情热激荡 从未敢终于世事炎凉 无能执手相望 无法去尝试结发同床 无力至心死身僵 一息坚强 ------ 我一直没有放弃,如果你也能看到 修身 修禅
  • 相关阅读:
    [转]Linq to SQL中的实体继承
    [转贴][WCF Security] 3. X509 身份验证
    [转贴]十大网站设计错误
    [转载].NET设计模式(1):开篇
    [转自JeffreyZhao]不妨来做个尝试:UpdatePanel for ASP.NET MVC
    [转]如何快速生成100万不重复的8位均匀分布的随机编号?
    [转贴]X.509 & RSA
    [c#]Webservice中如何实现方法重载(overload)以及如何传送不能序列化的对象作参数
    (Head First 设计模式)学习笔记(2) 观察者模式(气象站实例)
    (Head First 设计模式)学习笔记(1)
  • 原文地址:https://www.cnblogs.com/lz2lhy/p/6883696.html
Copyright © 2020-2023  润新知