抽象类
抽象 关键字 abstract
1.修饰类–被abstract修饰的类是抽象类
2.修饰方法–被abstract修饰的方法是抽象方法
格式:修饰符 abstract 返回值类型 方法名(参数列表);–没有方法体
1》一旦一个类中有抽象方法,那么这个类必须是抽象类
2》抽象类中既可以都是普通方法,也可以都是抽象方法,还可以混着来
3》 抽象类不允许实例化–创建对象
4》如果一个类继承了抽象父类,那么:
方案一:继续抽象,作为抽象子类
方案二:实现抽象父类中的所有抽象方法
5》创建时如果想使用抽象父类,可以创建多态对象进行测试
抽象类中是否有构造方法?有
问题: 既然抽象类不能实例化,为什么要有构造方法呢?
解释:不是为了自己使用,而是为了子类创建对象时使用super()
抽象类既可以定义变量,也可以定义常量
抽象类既可以有(全是)普通方法,也可以(全是)抽象方法。
package oop面向对象.抽象类;
public abstract/*修饰就是抽象类*/ class Student {
private String name;
abstract public void study();//抽象方法
abstract public void exam();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Student(String name) {
this.name = name;
}
Student(){}
}
接口
1.接口的关键字interface
2.我们通过implements建立接口与接口实现类的关系 InterImpl implements Inter
3.接口可以看作是一种特殊的抽象类,因为他里面全是抽象方法
4.实现子类如果与父接口建立了实现关系,有两种方案
方案一:作为抽象子类,不实现任何抽象方法
方案二:作为普通子类,实现父级接口中所有的抽象方法
5.接口没有构造方法,实现子类可以创建对象的原因是调用了Objectd 的无参构造
TIPS:问题:子类在创建对象时,默认调用父类的无参构造
那如果接口的实现类在没有明确指定父类是,使用的是哪个构造方法呢?
答案:如果一个类没有明确指定父类的话,默认继承顶级父类Object
所以实现类构造方法中的super(),调用的是Object类的无参构造
6.接口中没有普通成员变量,有的只是静态常量,所以当你定义int age=10;时
会自动拼接成:public static final int age=10
7.接口中的方法都是抽象方法,而且可以简写void eat();
默认会自动拼接public abstract
面向接口编程–先天设计的结果
面向抽象编程–后天向上抽取形成的结果
面向抽象编程:后天向上抽取形成的
面向接口编程:先天设计形成的,接口制定的是预先设定好的
default是表示不写修饰符,默认,如果default单词来修饰会报错
package oop面向对象.接口;
public interface/*修饰就是接口*/ Volaot {
/*public static final*/ int MAX_HIGHT = 100;
void fly();//飞行方法
void stop();//停止方法
}
interface Honent{
void helpOther();
}
类与类的关系
继承关系,而且只支持单继承
a extends b,a是子类,b是父类,子类可以使用父类的所有非私有资源,
如果子类对父类的功能不满意,是可以重写的
接口与接口的关系
继承关系,可以多继承
intter1 extends intter2,inter3,inter2和inter3是父接口,inter是子接口
接口的继承关系类似于功能的汇总,接口1拥有接口2 3的所有功能定义
inter extends inter2{}–本接口只有一个父接口
类与接口的关系
实现关系,一个类可以试想多个接口–多实现
class implments inter1,inter2{}
class implments intter3{}