一.多态的概述及其代码体现
A.多态概述:事物存在的多种形态
B.多态前提:
- 要有继承关系
- 要有方法重写
- 要有父类引用指向子类对象
package 多态;
public class first {
public static void main(String[] args) {
// TODO Auto-generated method stub
Cat c=new Cat();
c.eat();
Animal a=new Cat();
a.eat();
}
}
class Animal{
public void eat() {
System.out.println("动物吃饭");
}
}
class Cat extends Animal{
public void eat() {
System.out.println("猫吃饭");
}
}
二.多态中成员访问特点
成员变量:编译看父类,运行看父类
class Demo{
public static void main(String[]args) {
Father f=new Son();
System.out.println(f.num);
Son s=new Son();
System.out.println(s.num);
}
}
class Father{
int num=10;
}
class Son extends Father
{
int num=20;
}
输出结果为10和20;
成员方法:编译看父类,运行看子类
class Demo{
public static void main(String[]args) {
Father f=new Son();
f.print();
}
}
class Father{
int num=10;
public void print() {
System.out.println("father");
}
}
class Son extends Father
{
int num=20;
public void print() {
System.out.println("son");
}
输出结果为son
静态方法:编译看父类 运行看父类 只有非静态的成员方法 编译看父类 运行看子类
C.多态中向上转型和向下转型
Father f=new Son();向上转型
Son s=(son)f ;向下转型
D.多态的好处和弊端
- 好处: 提高代码的可维护性(继承保证)
- 提高代码的扩展性(由多态保证)
- 弊端:不能使用子类的特有属性和行为
三.抽象类的概述及其特点
- 抽象类和抽象方法必须用abstract关键字修饰
abstract class 类名{ }
public abstrsct void method( );
- 抽象类不一定有抽象方法 有抽象方法的类一定是抽象类或者是接口
- 抽象类的实例化:按照多态的方式 由具体的子类实例化
- 抽象类的子类:要么是抽象类 要么重写抽象类中的所有抽象方法
B.抽象类的成员特点
- 成员变量:既可以是变量 也可以是常量 abstract不可以修饰成员变量
- 有构造方法 用于子类访问父类数据的初始化
- 成员方法既可以是抽象的 也可以是非抽象的
抽象类的成员方法特性:
- 抽象方法:强制要求子类做的事情
- 非抽象方法:子类继承的事情 提高代码的复用性
Abstract不能和哪些关键词共存
- abstract和static 因为被abstract修饰的方法没有方法体,被static修饰的可以用类名调用,但是用类名调用抽象方法是没有意义的
- abstract和final 因为被abstract修饰的方法强制子类重写,被final修饰的不让子类重写 互相矛盾
- abstract和private 因为被abstract修饰的是为了让子类看到并强制重写,被private修饰是不让子类访问 互相矛盾
四.接口的概述及其特点
接口概述
- 狭义角度就是JAVA中的interface
- 广义角度就是对位提供规则的都是接口
接口特点
- 接口用关键字interface表示
- 类实现接口用implements表示
- 接口不能实例化
- 接口的子类可以是抽象类(意义不大)或具体类(重写接口中的所有抽象方法)
接口的成员特点
- 成员变量:只能是常量 并且是静态且公开的
默认修饰符:public static final 建议手动给出
- 构造方法:接口没有构造方法
- 成员方法:只能是抽象方法
默认修饰符:public abstract 建议手动给出
类与类 接口与接口 类与接口的关系
- 类与类:继承关系 只能单继承 可以多层继承
- 类与接口:实现关系 可以单实现 也可以多实现,并且还可以在继承一个类的同时实现多个接口
- 接口与接口:继承关系 可以可以单继承也可以多继承
抽象类和接口的区别
- 成员区别:
抽象类:
成员变量:可以是变量,也可以是常量
构造方法:有
成员方法:可以抽象,也可以非抽象
接口:
成员变量:只可以是常量
成员方法:只可以是抽象
- 关系区别:
类与类:继承 单继承
类与接口:实现 单继承 多实现
接口与接口:继承 单继承 多继承
设计理念区别:
抽象类:被继承体现的是:is a 的关系。抽象类中定义的是该继承体系的共性功能
接口:被实现体现的是:like a 的关系。接口在定义的是该继承体系的扩展功能