• 抽象类、接口、异常


    一.抽象类

    1.抽象方法和抽象类:

    ·抽象方法

    使用abstract修饰的方法,没有方法体,只有声明。定义的是一种“规范”,就是告诉子类必须要给抽象方法提供具体的实现。

    ·抽象类

    包含抽象方法的类就是抽象类。通过abstract方法定义规范,然后要求子类必须定义具体实现。

    抽象类的使用要点:

    1. 有抽象方法的类只能定义成抽象类

    2. 抽象类不能实例化,即不能用new来实例化抽象类。

    3. 抽象类可以包含属性、方法、构造方法。但是构造方法不能用来new实例,只能用来被子类调用。

    4. 抽象类只能用来被继承。

    5. 抽象方法必须被子类实现。

    抽象类和抽象方法的基本用法

    //抽象类
    abstract class Animal {
        abstract public void shout();  //抽象方法
    }
    class Dog extends Animal { 
        //子类必须实现父类的抽象方法,否则编译错误
        public void shout() {
            System.out.println("汪汪汪!");
        }
        public void seeDoor(){
            System.out.println("看门中....");
        }
    }
    //测试抽象类
    public class TestAbstractClass {
        public static void main(String[] args) {
            Dog a = new Dog();
            a.shout();
            a.seeDoor();
        }
    }
    

    二.接口

    1.接口的作用:

    接口中所有方法都是抽象方法。接口是完全面向规范的,规定了一批类具有的公共方法规范。

    2.区别

    1. 普通类:具体实现

    2. 抽象类:具体实现,规范(抽象方法)

    3. 接口:规范!

    3.定义接口:

    声明格式:

    [访问修饰符] ``interface` `接口名  [``extends` `父接口``1``,父接口``2``…] {``常量定义; ``方法定义;``}
    

    定义接口的详细说明:

    1. 访问修饰符:只能是public或默认。

    2. 接口名:和类名采用相同命名机制。

    3. extends:接口可以多继承。

    4. 常量:接口中的属性只能是常量,总是:public static final 修饰。不写也是。

    5. 方法:接口中的方法只能是:public abstract。 省略的话,也是public abstract。

    要点

    1. 子类通过implements来实现接口中的规范。

    2. 接口不能创建实例,但是可用于声明引用变量类型。

    3. 一个类实现了接口,必须实现接口中所有的方法,并且这些方法只能是public的。

    4接口的使用:

    public class TestInterface {
        public static void main(String[] args) {
            Volant volant = new Angel();
            volant.fly();
            System.out.println(Volant.FLY_HIGHT);
             
            Honest honest = new GoodMan();
            honest.helpOther();
        }
    }
    /**飞行接口*/
    interface Volant { 
        int FLY_HIGHT = 100;  // 总是:public static final类型的;
        void fly();   //总是:public abstract void fly();
    }
    /**善良接口*/
    interface Honest { 
        void helpOther();
    }
    /**Angle类实现飞行接口和善良接口*/
    class Angel implements Volant, Honest{
        public void fly() {
            System.out.println("我是天使,飞起来啦!");
        }
        public void helpOther() {
            System.out.println("扶老奶奶过马路!");
        }
    }
    class GoodMan implements Honest {
       public void helpOther() {
            System.out.println("扶老奶奶过马路!");
        }  
    }
    class BirdMan implements Volant {
        public void fly() {
            System.out.println("我是鸟人,正在飞!");
        }
    }
    

    5.接口的多继承:

    接口完全支持多继承。和类的继承类似,子接口扩展某个父接口,将会获得父接口中所定义的一切。

    interface A {
        void testa();
    }
    interface B {
        void testb();
    }
    /**接口可以多继承:接口C继承接口A和B*/
    interface C extends A, B {
        void testc();
    }
    public class Test implements C {
        public void testc() {
        }
        public void testa() {
        }
        public void testb() {
        }
    }
    

    三.内部类

    1.内部类(innerclasses):把一个类放在另一个类的内部

    内部类是相对独立的一种存在,其成员变量/方法名可以和外部类的相同。

    /**外部类Outer*/
    class Outer {
        private int age = 10;
        public void show(){
            System.out.println(age);//10
        }
        /**内部类Inner*/
        public class Inner {
            //内部类中可以声明与外部类同名的属性与方法
            private int age = 20;
            public void show(){
                System.out.println(age);//20
            }
        }
    }
    
    

    内部类的作用:

    1. 内部类提供了更好的封装。只能让外部类直接访问,不允许同一个包中的其他类直接访问。

    2. 内部类可以直接访问外部类的私有属性,内部类被当成其外部类的成员。 但外部类不能访问内部类的内部属性。

    3. 接口只是解决了多重继承的部分问题,而内部类使得多重继承的解决方案变得更加完整。

    内部类的使用场合:

    1. 由于内部类提供了更好的封装特性,并且可以很方便的访问外部类的属性。所以,在只为外部类提供服务的情况下可以优先考虑使用内部类。

    2. 使用内部类间接实现多继承:每个内部类都能独立地继承一个类或者实现某些接口,所以无论外部类是否已经继承了某个类或者实现了某些接口,对于内部类没有任何影响。

    2.内部类的分类:

    Java中内部类主要分为成员内部类(非静态内部类、静态内部类)、匿名内部类、局部内部类。

    四.异常机制

    Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception。

    image-20200312003850292

  • 相关阅读:
    暂停公告
    【laravel】Laravel 5 TokenMismatchException on PHP 5.6.9
    【laravel】laravel class 里面定义以head开头的方法会报错
    【kindle】【转发】kindle链接WIFI自动断开问题
    【js】window.onscroll 无效问题
    【js】【转发】jreturn;、return true、return false;区别
    【js】【vue】获取当前dom层
    【js】input 焦点到内容的最后
    【jquery】 选中复选框 和 return false 的影响
    【jquery】 form ajaxSubmit 问题
  • 原文地址:https://www.cnblogs.com/zh93/p/12534239.html
Copyright © 2020-2023  润新知