Java学习day06--多态,抽象,接口,匿名内部类

时间:2022-06-13
本文章向大家介绍Java学习day06--多态,抽象,接口,匿名内部类,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

2018.6.9 1.多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态就是同一个接口,使用不同的实例而执行不同操作。 多态存在的三个必要条件: 继承 重写 父类引用指向子类对象 注意: 当使用多态方式调用方法时,首先检查父类中是否有该方法,如果 没有,则编译错误;如果有,再去调用子类的同名方法。 多态的好处:可以使程序有良好的扩展,并可以对所有类的对象进 行通用处理。 成员变量

编译看左边,运行看左边

成员方法

编译看左边,运行看右边

静态方法

编译看左边,运行看左边

所以前面我说静态方法不能算方法的重写

无法访问子类独有的成员变量和方法。 常用情景:

Person p1 = new Teacher();
    Person p2 = new Student();
    public static void test(Person p) {
        p.run();
    }

2.抽象(abstract)

抽象类中可以有属性 抽象类有构造方法,但是不能实例化:用于子类访问父类数据的初始化

抽象类中可以写普通的方法 有抽象方法不能写方法体 public abstract void run(); 抽象成员方法:可以规范子类必须实现某些功能 子类继承抽象类: 如果父类有抽象类,子类必须重写 如果子类也是抽象的,那么子类继承父类的抽象方法可以是抽象的。

抽象类不一定有抽象方法,有抽象方法的类一定是抽象类

抽象类不能实例化 那么,抽象类如何实例化呢?

   按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。

抽象类的子类 要么是抽象类 要么重写抽象类中的所有抽象方法


3.接口(interface) 可以定义属性,但必须赋值.默认为public static final 可以定义方法:default和static修饰的方法, 没有方法体的方法(public abstract) 没有构造方法,不能实例化 格式:class 类名 implements 接口名 {}


4.类与接口之间的关系 类与类 继承关系,只能单继承,但是可以多层继承

类与接口 实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口

接口与接口 继承关系,可以单继承,也可以多继承


5.抽象和接口的区别

成员区别

抽象类: 变量,常量; 抽象方法,非抽象方法

接口: 常量;抽象方法

关系区别

一个类只能继承一个抽象类

一个类可以实现多个接口

设计理念区别

抽象类:共性功能

接口:扩展功能

抽象类可以定义构造函数,接口没有公祖奥函数 接口:方法都是public abstract 变量都是public static final 抽象:方法有普通也有抽象,变量有常量和变量


6.包 package 包名; . //在程序第一行 import 包名; public —>都可以访问 private—>只有本类中可以访问


7.内部类 类中的类:内部类访问外部类的内容,包括私有:(访问任意内容) 外部类访问内部类 ,必须创建对象。 成员内部类 Outer.Inner i = new Outer().new Inner(); 常用修饰符:private 为了保证数据的安全性; static 为了让数据访问更方便 静态内部类 Outer.Inner i = new Outer.Inner(); 对象名.成员;

局部内部类 { class Inner{} new Inner().成员; } 局部内部类访问局部变量,必须被final修饰。


8.匿名内部类 内部类的简化形式 前提:存在一个类或者接口, 这里的类可以是具体类也可以是抽象类 本质:继承了一个类或者实现了一个接口

 new T() {
    @Override
    public void run() {
    // TODO Auto-generated method stub
    System.out.println("我比刘翔跑的快");
    }}.run();  //输出:我比刘翔跑得快