抽象类:
抽象(abstract): 修饰方法 ------抽象方法
修饰类-----抽象方法
抽象方法,没有实现的部分,也就是只有声明,没有具体实现.
抽象类中的抽象方法,强制子类去重写 作为父类的抽象类.
抽象类不能实例化,即不能利用抽象了实例化对象(尽管抽象类可以有构造函数)
抽象类 只要记住一句:除了不能实例化对象之外,和Java普通类没有区别.
抽象类可以被继承,如果子类不是抽象类,那么必须要实现父类抽象方法.如果子类还是抽象类,可以不用实现,但必须在子类的衍生类中有最初抽象父类方法的实现.
抽象类特点
1.成员变量:可以是成员变量,也可以是常量
2.成员方法:可以有抽象方法,也可以有成员方法(默认实现方法)
3.构造函数:可以写构造函数
抽象类 中不一定有抽象方法,但是抽象方法一定是在抽象类中的.
abstract 不能与哪些关键字共存?
1.abstract 和 static
static 修饰方法用类名调用 abstract 修饰抽象方法 没有实现,没有实现的方法只是声明,不能调用
2.abstract 和 final
final 修饰的方法是不能被继承的,何谈子类重写父类的抽象方法
3.abstract 和 private
private 修饰的方法只能在本类调用,类外不能调用,子类同样访问不了
接口:
接口特点:不需要方法实现,接口中只能声明抽象方法.
如果不写 public abstract 修饰接口中声明的方法,系统会自动默认补上
接口也不能实例化对象,但是可以使用多态的方式创建实现类的对象.
public class D2 {
public static void main(String[] args) {
InterA a = new A();
}
}interface InterA{
abstract void Print();
}class A implements InterA{
@Override
public void Print() {
// TODO Auto-generated method stub
}
}
接口不是类
1.成员变量:只可以有常量
2.成员方法:只可以有抽象方法,不可以有成员方法
3.构造方法:没有
当在接口中声明变量 ,这时 系统默认是 public static final 修饰的
interface InterA{
int a = 0;
public static final int b =0;
}
这里如果a 不赋初值 就会报错,根本原因就是 应为他不是成员变量 而是 public static final 修饰的常量,必须有初值.
这里的 b 变量 就是 完整的变量命名方式,建议初学者使用B 命名格式,不容易搞错在
总结
类和类的关系:继承关系 单继承和多层继承
类和接口的关系:实现关系 单实现和多实现
接口和接口:可以多继承,(只有在接口这里,才可以'多继承')
如图,这样的多继承,编译器不会报错.