黑马程序员---面向对象(四)

来源:互联网 发布:live photos软件 编辑:程序博客网 时间:2024/04/29 18:26

---------------------- android培训、java培训、期待与您交流! ----------------------

 

 

1:接口(interface)
 (1)接口的由来:当一个类中所有的方法都是抽象的时候,你没必要定义为抽象类,
                定义为接口就可以了。
 (2)解决了java中只能单继承的问题。(对多继承进行了优化)
  A:类与类:只能是单继承。 extends
  B:接口与接口:可以是单继承,也可以是多继承。 extends
  C:类与接口:可以是单实现,也可以是多实现。 implements
 (3)成员特点:
  A:只有成员变量和成员方法。
  B:成员变量 默认修饰符 public static final
   **int X = 20;
   **其实是这样的 public static final int X = 20;
  C:成员方法 默认修饰符 public abstract
   **void show();
   **其实是这样的 public abstract void show();
  建议:为了便于阅读,自己手动加上修饰符。
 (4)接口特点:
  A:接口是对外暴露的规则
  B:接口是功能的扩展
  C:接口降低了程序的耦合性。
   **内聚(自己实现功能的能力)
   **高内聚,低耦合。
  举例:主板和CPU,USB接口,电源插座。
  D:扩展说了下接口的理解
   **狭义的理解就是java中的接口。
   **广义的理解就是:任何定义的规范都是接口。
 (5)接口和抽象类的区别:
  A:抽象类只能被单继承;接口可以被多实现。
  B:抽象类中的成员:成员变量:可以是常量,也可以是变量。
       成员方法:可以是抽象的,也可以是非抽象的。
       构造方法:虽然不可以创建对象,但是可以给子类实例化用。
     接口中的成员:成员变量:只能是常量。默认修饰符 public static final
     成员方法:只能是抽象的。默认修饰符 public abstract
  C:抽象类中定义的是体系结构中的共性的内容。
     接口中定义的是对象的扩展功能。
  D:抽象类被继承表示的是:"is a"的关系。xx是yy中的一种。
     接口被实现表示的是: "like a"的关系。xx像yy中的一种。
 (6)学生:Student
  A:属性:学号,姓名,年龄
  B:方法:学习(study),吃饭(抽象eat),抽烟(是不是所有的学员都抽烟呢?),
     篮球(是不是所有的人都会打篮球呢?)

  分析:学员都具备学习的行为和吃饭的行为,但是并不是所有的学员都抽烟,也不是所有的学员都打篮球
      interface Smoking {
   public abstract void smoking();
   }
   interface Sport{
   public abstract void playBasketBall();
   }
  
    描述的是即会抽烟又会打篮球的学生:SmokeStudent extends Student implements Smoking,Sport
  一个类只能继承一个类,但是可以实现多个接口,每实现一个接口,功能就扩展了一部分
  SmokeStudent ss = new SmokeStudent();
  ss.eat();
  ss.study();
  ss.smoking();
  ss.playBasketBall();
  
2:多态
 (1)某一类事物的多种存在形态。
  **方法重载(静态多态)
  **方法重写(动态多态,对象多态)
 (2)对象多态的前提
  A:类与类(或接口)要有继承(或实现)关系。
  B:一定要有方法的重写。
  C:一定要有父类或者接口的引用指向子类的对象。Person p = new SuperMan();
              SuperMan sm = (SuperMan)p;
 (3)多态思想:可以指挥同一类型的一批对象做事情。多态的出现让我们复杂的问题简单化了。
  A:Animal Cat Dog
   **method(Animal a){a.eat();}//Animal a = new Cat();
 (4)多态中成员的特点:(我们只研究特殊的,就是说名字一样的东西)
  Fu f = new Zi();
  A:成员变量:编译和运行都看Fu。
  B:非静态方法:编译看Fu,运行看Zi。
  C:静态方法:编译和运行都看Fu。

举例: 动物的例子

//向上转型Animal a = new Cat();a.eat();a.catchMouse();//向下转型Cat c = (Cat)a;c.eat();c.catchMouse();//向上转型Animal a = new Dog();//向下转型 转换异常//Cat c = (Cat)a;Dog d = (Dog)a;


 

 

 

---------------------- android培训、java培训、期待与您交流! ----------------------

原创粉丝点击