上面:对于有抽象方法的类一定是抽象类,抽象类不一定有抽象方法的理解:
如果我们定义一个抽象类,并没有抽象方法,最主要的目的是为了防止实例化。
public abstract class Person {
// 1,可以定义成员变量
//2, 可以是任意权限修饰符
private int a = 1;
protected int b =1;
public int c = 1;
//3,可以定义构造方法
public Person(){ }
// 4,可以有抽象方法和普通方法
public abstract void test();
public void method(){
System.out.println("......");
}
// 5,可以包含静态方法
public static void happy(){};
}
//6, 一个类只能继承一个抽象类
class Man extends Person{
@Override
public void test() {
}
}
// 接口
interface Animal{
public static final int aaa = 123;
// 2,不能定义构造器
//public Animal(){}
void eat();
public static void eat2(){}
}
抽象类:
1.为什么使用?
当父类的某些方法不确定时,可以用abstract关键字来修饰该方法[抽象方法],用abstract来修饰该类[抽象类]。
我们都知道,父类是将子类所共同拥有的属性和方法进行抽取,这些属性和方法中,有的是已经明确实现了的,有的还无法确定,那么我们就可以将其定义成抽象,在后日子类进行重用,进行具体化。这样,抽象类也就诞生了。
书写要求:
抽象方法必须用 abstract 关键字修饰,如果一个类含有抽象方法,那么这个类就是抽象类,类也必须用 abstract 关键字来修饰。由于抽象类有未实现的方法,所以抽象类无法被实例化。(但是可以有构造器)