美文网首页JavaWeb程序员
面向对象-抽象类与接口

面向对象-抽象类与接口

作者: 我叫吴智斌 | 来源:发表于2018-11-14 12:30 被阅读4次

    抽象类-求图形面积
    多个类,有相同的方法,可以抽出一个父类出来,把相同的方法放到父类当中

    1.每一个圆形都有面积
    不同图形求面积的算法不一样
    每一个图形子类,都必须覆盖这个方法,在每个里面写上自己的方法体

    2.在这个图形类当中,定义了getArea方法,因为不同的图形的算法是不一样的
    父类不知道方法体里面该怎么写,本来不需要方法体的

    子类必须得要覆盖此方法
    在定义的时候,不要方法体了{...}
    class Graph {
        Double getArea() {
            return 0.0;
        }
    }
    
    // 圆形
    class Circle extends Graph {
    
        private Integer r;
    
        Circle(Integer r) {
            this.r = r;
        }
    
        // 求面积
        Double getArea() {
            return 3.14 * r * r;
        }
    }
    
    // 矩形
    class Rectangle extends Graph {
        private Double width;
        private Double height;
    
        Rectangle(Double width, Double height) {
            this.width = width;
            this.height = height;
        }
    
        Double getArea() {
    
            return this.width * this.height;
    
        }
    
    }
    
    // 三角形
    class Triangle extends Graph {
        private Integer a;
        private Integer b;
        private Integer c;
    
        Triangle(Integer a, Integer b, Integer c) {
            this.a = a;
            this.b = b;
            this.c = c;
        }
        
    
    }
    
    public class Test {
    
        // 求圆,矩形,三角形面积
    
        public static void main(String[] args) {
    
            Circle cir = new Circle(233);
            System.out.println(cir.getArea());
    
            Rectangle r = new Rectangle(12.5, 123.3);
            System.out.println(r.getArea());
    
            
            Triangle t = new Triangle(12, 22, 33);
            System.out.println(t.getArea());//0.0
        }
    
    }
    

    抽象方法
    在方法前面添加了一个关键字abstract
    特点:
    1.抽象方法是没有方法体的
    2.抽象方法要定义在抽象当中 或 接口 (在类前面添加上一个abstract 就成为了抽象类)
    3.抽象方法不能是私有的private,不能使用final修饰,不能同时使用static

    只要使用了抽象方法,子类必须要覆盖此方法,抽象方法没有方法体

    abstract class Graph {
        abstract Double getArea();//抽象方法
    }
    

    抽象类
    其实是一个不完整的类,需要作为一个父类,子类才能完成对应的功能
    抽象类必须得要有子类才行(抽象类一般都当作父类来继承 )
    抽象类当中的注意点:
    1.抽象类是不能直接创建对象的,但是抽象类有构造器
    2.抽象类中可以有抽象方法,也可以有非抽象方法(普通方法)
    3.子类没有去覆盖抽象方法 把子类也变成抽象类
    4.构造方法不能定义为私有的(抽象方法必须得要让子类继承之后,才能实现内部的方法体
    子类继承的话,先去调用父类的构造方法
    )
    5.抽象类不能使用final来去修饰

    命名:抽象类命名时,都喜欢在前面加上一个Abstract

    抽象类与普通类有什么区别?
    普通的类你有的(方法,字段,构造器),抽象类都有
    抽象类不能创建对象,抽象类可以包含抽象方法,也可以包含非抽象方法

    抽象类必须得有子类才有意义






    接口概念
    什么是接口?
    硬件接口:指的是两个硬件设备之间的连接方式.硬件接口既包括物理上的接口,比如我们所说的usb接口
    在java中,接口表示一种规范/约束/要求实现者必须遵守该规范:用来约束使用者应该怎么做


    接口是一种规范

    在java中接口也是表示一种规范,使用抽象方法来定义一组功能
    必须要实现者给提供方法的实现(谁遵守谁提供方法)

    接口的定义 命名规范:在名字前面添加I 在后面添加able

     例如:IUsbable
    interface    接口名称{
    
    } //像类一样定义,接口也会生成对应的字节码
    

    接口是一个特殊的抽象类 内部的abstract 可以省略不写
    如果没有在方法面前添加abstract 会在编译时自动添加上

    interface IUsbable{
        //接口
         String name = "wzb";  //默认是  public static final 常量
         void trans();
         //public abstract void trans();
    }
    

    接口注意点
    1.接口是没有构造器的,接口是不能创建对象的
    2.接口当中定义变量,都是全局的静态常量
    String name = "myxq";
    通过反编译工具之后查看
    public static final String name;
    3.接口当中定义的方法都是公共的抽象的方法

    void trans();
    //public abstract void trans();
    

    4.接口当中可以定义内部类,内部类也是public abstract
    5.接口是可以继承的,他是可以多继承的
    interface 接口名称 extends 继承的接口名,继承的接口名
    类是不能多继承的
    接口继承的时候,不会去覆盖父接口的方法

    //爬行动物
    interface IWorkable {
        // 接口
        void walk();
    
    }
    
    // 水生动物
    interface ISwimable {
        void swim();
    }
    
    // 两栖动物
    interface Iamphibiousable extends ISwimable, IWorkable {
    
    }
    

    接口的实现
    类名 extends 其他的类(只能继承一个类) implements 接口(可以多个接口)

    class Cat extends Animal implements IWorkable,ISwimable {}
    猫类继承了动物类实现了 IWorkable ,ISwimable  多个接口
    

    在是实现类当中必须得要去覆盖接口当中定义的方法
    实现类的方法必须是public

            Cat cat= new Cat();
            cat.walk();
            
            interface IWolkable 接口也可以称为它的父类   父接口
    
            多态写法,把子类对象赋值给父类类型
            IWorkable cat1 = new Cat();//面向接口编程
            cat1.walk();         多态运行时表现出来的还是子类的特征  (编译时,看左边,运行时,看右边)
    

    接口流程
    1.创建接口规范
    2.定义接口实现类
    3.创建对象

    接口与抽象类的区别
    相同点:
    1.都是被其他类实现或者被继承的(不然没有存在的意义)
    2.都不能实例化
    3.都可以定义抽象方法,定义的抽象方法必须得要覆盖.

    不同点:
    1.接口是没有构造器的,抽象类当中是有构造器的(有也不能实例化对象)
    2.抽象类当中可以包含普通方法和抽象方法,接口当中只能有抽象方法,不能有普通方法(带有方法体)
    3.接口当中默认成员变量,public static final 变量;静态常量 抽象类当中 默认是包访问权限
    4.方法:接口当中默认方法 public abstract 方法名; 抽象类当中 默认权限

    接口当中成员变量
    interface IWalkable{
        String name ="wzb";
        void walk();
    }
    反编译之后
    interface IWalkable
    {
        public static final String name = "wzb";
    
        public abstract void walk();
    }
    

    面向接口编程
    面向接口编程:把实现类对象赋值给接口类型的变量
    多态的好处:屏蔽了不同类之间实现的差异,从而达到通用编程

    //主板插入各种usb设备
    interface Iusb {
    
        (public abstract ) void swpData();
    
    }
    
    class MotherBoard {
    
        void puluginIn(Iusb usb) {
            usb.swpData();
        }
    
    }
    
    class Mouse implements Iusb {
        public void swpData() {
            System.out.println("鼠标移动");
        }
    }
    
    class KeyBoard implements Iusb {
        public void swpData() {
            System.out.println("打字");
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
    
            Iusb k = new KeyBoard();
    
            Iusb m = new Mouse();
    
            MotherBoard b = new MotherBoard();
            b.puluginIn(m);
            b.puluginIn(k);
        }
    
    }
    

    相关文章

      网友评论

        本文标题:面向对象-抽象类与接口

        本文链接:https://www.haomeiwen.com/subject/grzuxqtx.html