接口
(1)当抽象类中的方法都是抽象的时候,java就提供了一种新的表现形式:接口。接口是功能的集合
(2)格式:
父接口:
public interface Inter
{
//定义的都是抽象方法
}
子类:
public class InterImpl implements Inter
{
//实现接口的所有方法
}
(3)接口的特点:
A:不需要被abstract修饰。
B:类实现接口,可以单实现,还可以多实现。
C:接口可以继承接口,可以单继承,也可以多继承。
D:接口与父类的功能可以重复,均代表要具备某种功能。
(4)抽象类和接口的区别:
A:成员的区别
抽象类:
成员变量:可以是变量,也可以是常量。
构造方法:有构造方法,用于子类实例化使用。
成员方法:可以是抽象的,也可以是非抽象的。
接口:
成员变量:只能是常量。
默认修饰符:public static final;
成员方法:只能是抽象的。
默认修饰符:public abstract
推荐:默认修饰符请自己永远手动给出。
构造方法:没有构造方法
B:类和接口的关系区别
类与类:
继承关系,只能单继承。可以多层继承。
类与接口:
实现关系,可以单实现,也可以多实现。
类还可以在继承一个类的同时实现多个接口。
接口与接口:
继承关系,可以单继承,也可以多继承。
C:体现的理念不同
抽象类里面定义的都是一个继承体系中的共性内容。
接口是功能的集合。
构造方法
(1)用来创建实例对象的方法。创建对象时,可以直接为成员变量赋值,无需再在对象产生后再赋值。
(2)有无参构造和带参构造。
(3)构造方法是必须存在的,如果没有手动给出构造方法,Java会自动为我们补齐一个空参的构造方法
(4)具体类与抽象类均有构造方法,接口没有构造方法。
(5)有继承关系后,在创建子类对象时无论使用带参构造或者无参构造均会默认调用父类的无参构造方法(super())
注意:如果手动给出任意一个构造方法,java就不会为我们补齐空参构造
格式
奇怪的方法定义格式:没有返回值类型定义,方法名与类名相同
public 类名(参数类型 参数1,参数类型 参数2){
//创建对象时要执行的逻辑,经常为为成员变量赋值
}
this:当前对象的引用
访问本类对象成员变量 this.变量名
调用本类普通方法 this.方法名(参数)
本类构造方法调用本类其他构造 本类构造方法第一行this(参数)
super:父类对象的引用
访问本类对象当中的父类对象成员变量 super.变量名
调用本类对象当中的父类普通方法 super.方法名()
本类构造方法调用父类构造 本类构造方法第一行super(参数)
多态
(1)同一个对象,在不同时刻表现出来的不同状态。
举例:水(水,冰,水蒸气)
猫(猫,动物)
(2)前提:
A:有继承或者实现关系。
B:有方法的重写。
C:有父类(接口)的引用指向子类对象。
(3)多态中的成员使用特点:
A:成员变量
编译看左边,运行看左边。
B:成员方法
编译看左边,运行看右边。
class Fu {
int num=4;
void show() {
System.out.println("showFu");
}
}
class Zi extends Fu {
int num=5;
void show() {
System.out.println("showZi");
}
}
class T {
public static void main(String[] args) {
Fu f=new Zi();
System.out.println(f.num);
f.show();
}
(4)多态中的转型:
A:向上转型
把子类对象赋值给父类(接口)的引用
B:向下转型
把父类(接口)的引用强制转换成子类对象
(5)多态的好处及弊端:
A:好处
提高了程序可维护下和可扩展性。
开闭原则:对扩展开放,对修改关闭。
B:弊端
不能使用子类特有内容。
要想使用,要么向下转型,要么重新创建子类对象。
(6)多态的三种形式:
A:具体的类多态
B:抽象类多态
C:接口多态
|
|