目录
1、抽象类
当父类的方法不能确定时,可以用abstract关键字来修饰方法,这个方法时抽象方法,用abstract来修饰该类就是抽象类。
public abstract class Animal {
public abstract void shout();
}
抽象类的注意事项:使用abstract修饰的类为抽象类
1)抽象类中可以有抽象方法,也可以没有抽象方法。
2)抽象类中可以有普通方法,也可以没有普通方法。
3)抽象类不能实例化(不能通过new来创建对象)。
4)abstract只能修饰类和方法,不能修饰属性和其它方法。
5)抽象方法不能使用private、final和static来修饰,因为这些关键字都和重写相违背的。
2、抽象方法:
使用abstract修饰的方法为抽象方法
1)抽象方法没有方法体
public abstract void test1();
2)抽象方法所在的类要定义为抽象类
3)某个类继承了一个抽象类,那么该类需要重写抽象类中所有的抽象方法,如果不重写,这个类也需要定义为抽象类。
重写抽象类的所有方法:
public class Son1 extends Father{
@Override
public void test1() {
System.out.println("Son1类中重写的test1()方法");
}
@Override
public void test2() {
System.out.println("Son1类中重写的test2()方法");
}
}
3、 抽象类和抽象方法的使用
package cn.bdqn.demo02;
//定义Father的抽象类
public abstract class Father {
private String name;
private int age;
public Father() {
super();
}
public Father(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public abstract void test1();//抽象方法
public abstract void test2();//抽象方法
}
public class Son1 extends Father{
//继承Father抽象类进行重写
@Override
public void test1() {
System.out.println("Son1类中重写的test1()方法");
}
@Override
public void test2() {
System.out.println("Son1类中重写的test2()方法");
}
}
public class Test {
public static void main(String[] args) {
//抽象类不能实例化,需要进行多态向上转行
//创建Father类对象
// Father father1 = new Father();
Father father2 = new Son1();
//形式上是Father的引用调用Father类中的test1()方法,实际上调用的是Son1类中的test1()方法,因为father2指向的是Son1,所以father1调用的是Son1重写的test1()方法
father2.test1();
}
}