• java 面向对象抽象类和接口


    1.abstract:可以修饰类和方法,被abstract修饰过的称为抽象类和抽象方法。

    抽象类: 除了不可以创建对象, 其他和普通类一致。 可以有成员方法、静态方法和构造方法(提供给子类调用)等。

    抽象方法: 含有抽象方法的类必须是抽象类, 但抽象类不一定有抽象方法; 抽象方法不允许有方法体,只能以分号结尾 , 即只做声明

    1 public abstract class Lianxi {
    2     public abstract void print();
    3 }

    抽象方法必须被子类实现,如果子类不能实现父类的抽象方法,那么子类也必须是抽象类。

    什么情况下使用:父类的名称比较抽象,创建对象无意义,如动物类;避免子类设计的随意性,严格限制子类的设计,使子类之间可以更加通用。

    2.接口详解:使用interface修饰,是一种数据类型,引用数据类型。

    如果一个类中所有的方法均为abstract方法,那么这个类就可以声明为接口

    1 public abstract class MyClass {
    2     public abstract void print();
    3     public abstract String fun();
    4     public abstract void show();
    5 }

    可以改为如下代码;  包->右键->新建->interface(接口)

    1 public interface MyInterface {    
    2     void print();
    3     String fun();
    4     void show();
    5 }

    接口不是类,不可以定义构造方法

    接口可以包含:抽象方法(可省略public abstract 默认是public的) 、非抽象方法(JDK1.8新特性 ,必须使用default关键字)、属性常量(public static final),public static final 可以省

    略不写

     1 public interface MyInterface {
     2      String name="张三";
     3      public static final String name2="张三";//等同上一句
     4      void show();
     5      String fun();
     6      int [] method();
     7      /**JDK1.8新特性 ,必须使用default关键字*/
     8      public default void method2(){
     9          
    10      }
    11      //接口中不允许定义构造方法
    12     /* public MyInterface(){
    13          
    14      }*/
    15 }

    3.接口与类的关系

    (1) 类去实现接口中的抽象方法,实现关系 ,implements ,实现接口中的所有抽象方法

     1 public class InterfaceImpl implements MyInterface{
     2 
     3     @Override
     4     public void show() {
     5         // TODO Auto-generated method stub
     6         
     7     }
     8 
     9     @Override
    10     public String fun() {
    11         // TODO Auto-generated method stub
    12         return null;
    13     }
    14 
    15     @Override
    16     public int[] method() {
    17         // TODO Auto-generated method stub
    18         return null;
    19     }
    20 
    21 }

    (2) 一个类存在继承关系,又存在实现关系?extends前?implements 前?

    继承 →父子关系 →亲爹
    实现 →实现关系-→干爹

    extends 在前,implements 在后

    1 public class Stuent extends Person  implements Play{

    (3) 如果父类与接口中有完全相同的方法(一模一样),子类/实现类所实现的方法是父类的?接口的?

    父类优先于接口,子类实现的是父类中的方法

    (4) 如果父类中与接口中有同名方法(只是名字相同,参数不同),对子类/实现类有什么要求呢?

    父类与接口中的方法,在子类/实现类中构成方法的重载

    4。接口的特征:传递性和继承性(多继承)

     1 public interface InterfaceA {
     2     public void show();
     3 }
     4 interface InterfaceB {
     5     
     6 }
     7 interface InterfaceC extends InterfaceB,InterfaceA{
     8     
     9 }
    10 class Impl implements InterfaceC{
    11 
    12     @Override
    13     public void show() {
    14         // TODO Auto-generated method stub
    15         
    16     }
    17     
    18 }

    5.使用接口的意义

    可以实现设计和实现的分离,抽象出 N 多不同类的共同点。
    举例:飞机,鸟,球,导弹,宇宙飞船……

    继承:is –a 关系  三角形 is a 几何图形

    鸟 is a 球? 不成立

    接口 : has –a 关系 手机 has a 拍照的功能   飞机 has a 飞行的

    接口体现的是一种能力

     1 public interface Fly {
     2     public void flying();//飞行的能力
     3 }
     4 class AirPlane implements Fly{
     5 
     6     @Override
     7     public void flying() {
     8         System.out.println("飞机在祖国的蓝天上自由飞翔...........");
     9     }
    10     
    11 }
    12 class Bird implements Fly{
    13     @Override
    14     public void flying() {
    15         System.out.println("小鸟唱着动听的歌,在天空中飞................");
    16     }
    17 }
    18 class FootBall implements Fly{
    19     @Override
    20     public void flying() {
    21         System.out.println("球被踢了一脚,划了个美丽的弧线飞到了对方的球门里..........");
    22     }
    23 }
     1 public class Test {
     2     public static void main(String[] args) {
     3         //接口类型(引用数据类型)指向实现类的对象
     4         Fly airPlane=new AirPlane();
     5         Fly bird =new Bird();
     6         Fly football=new FootBall();
     7         //调用相同的方法
     8         airPlane.flying();
     9         bird.flying();
    10         football.flying();
    11         //运行结果,不相同
    12         
    13     }
    14 }

    总结:使用接口实现多态的步骤
    (1) 编写接口
    (2) 实现类实现接口中的方法
    (3) 接口(类型)new 实现类对象

  • 相关阅读:
    day16-bootstrap和django
    day18-2-django之分页和session
    day17-django的ORM与其他
    day18--django3之Ajax
    day12--前端基础之css
    day12--前端基础之html
    面向对象高级、异常处理和socket
    回归python培训——类与对象、继承、多态和多态性、封装、绑定方法和非绑定方法、反射
    python函数、装饰器、迭代器、生成器
    nginx反向代理时保持长连接
  • 原文地址:https://www.cnblogs.com/bfcs/p/10309672.html
Copyright © 2020-2023  润新知