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(); //输出:我比刘翔跑得快
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 在Python中使用OpenCV绘画和素描
- Uber正式开源分布式机器学习平台:Fiber
- 分布式ID生成服务,真的有必要搞一个
- IP 和 TCP 抓包分析实验
- 一些恶心的代码片段
- 学算法还能指导找对象?是的,这就是大名鼎鼎的稳定婚姻算法
- 基于SCF实现批量备份Elasticsearch索引到COS
- Prometheus Operator 常用指标
- Prometheus 常用 PromQL 语句
- 小游戏互动能力升级,获取未注册好友名单,定向分享
- 这年头还不会SpringBoot?
- PB级大规模Elasticsearch集群运维与调优实践
- 长假慢学,用TensorFlow做了个AI游戏
- 微服务平台之API授权
- 一些让人恶心的代码片段