抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类或者是接口;
抽象类无法进行实例化;(根据多态的方式,有具体的子类进行实例化)
抽象类的子类:
要么是抽象类;要么重写抽象类中的所有抽象方法;
抽象类的成员特点:
1、成员变量:既可以是变量,也可以是常量。abstract不能修饰成员变量。
2、构造方法:有。
3、成员方法:既可以是抽象的,也可以是非抽象的。
为什么要用抽象类?抽象方法?
强制子类对抽象方法进行重写。
将一个类定义成抽象类的意义是目的?
不让其他类创建本类对象,交给子类完成。
abstract不能和哪些关键字共存?
接口:
接口不能被实例化。
接口中的变量都是常量、静态、公开的。(例如:static public final int num=10;)
接口中没有构造方法,接口中的成员方法都是抽象的
public class run {
public static void main(String[] args) {
inter d = new Demo();
d.print();
System.out.println(inter.num);
}
}
interface inter{
public int num=10; //static abstract public int num=10;
public abstract void print();
void print2(); //默认:public void void print2();
}
class Demo /*extends Object*/ implements inter{ //默认继承Object
public Demo(){
super();
}
public void print(){
System.out.println(num);
}
public void print2(){
System.out.println("print2");
}
}
类与类,类与接口,接口与接口之间的关系:
类与类:只能单继承,可以多层继承
类与接口:实现关系,可以单实现,也可以多实现。并且还可以在继承一个类的同时实现多个接口
接口与接口:继承关系,可以单继承,也可以多继承
package interface2;
public class run {
public static void main(String[] args) {
Demo d = new Demo();
d.print1();
d.print2();
}
}
interface Inter1{
public abstract void print1();
}
interface Inter2{
public abstract void print2();
}
interface Inter3 extends Inter1,Inter2{
public abstract void print3();
}
class Demo /*extends Object*/ implements Inter1,Inter2{
public void print1(){
System.out.println("print1");
}
public void print2(){
System.out.println("print2");
}
}
抽象类与接口的区别:
抽象类:成员变量:可以变量,也可以常量
成员方法:可以抽象也可以非抽象
构造方法:有
接口:成员变量:只可以是常量
成员方法:只可以是抽象的