目录
一:抽象
(1)什么是抽象方法呢?
可以类比咱们的类,是一个范围比较大的、广泛的称呼,比较抽象。比如下面定义的一个 eat 方法,我只是定义为“吃”,但并没有明确说什么吃什么,是一个广泛而不能明确的定义;
(2)定义
抽象方法:权限修饰符 abstract 返回值类型 方法名( )【没有大括号】;
例如 public abstract void eat ( ) ;
说到抽象类,不得不提到抽象方法,因为抽象方法必须放在抽象类中使用;
下面是抽象类的格式:public abstract class 类名( ){ } ;
当然,抽象方法中除抽象类外,也可以拥有普通方法;
public abstract class AnimalClass {//抽象方法
public abstract void eat( );//抽象类
public void show(){//普通方法
System.out.println("这是普通方法");
}
}
二:使用抽象
1.不能直接创建抽象类的对象来访问抽象方法 ;
2.必须使用继承中的子类来访问抽象方法;
3.子类中必须实现(覆盖重写)父类中所有的抽象方法才能访问;
4.子类创建对象后即可调用抽象方法;
下面我们来举一个案例:
需要强调的是抽象类的实现:删去 Abstract 和 “分号”,加上大括号;
public abstract class AnimalClass { //抽象方法
public abstract void eat( ); //抽象类
public void show(){ //普通方法
System.out.println("这是普通方法");
}
}
public class Cat extends AnimalClass {
@Override
public void eat( ){//抽象类的实现:删去Abstract和“分号”,加上大括号
System.out.println("蚂蚁吃大象");
}
}
public class AnimalDemo {
public static void main(String[] args) {
Cat c=new Cat();
c.eat();
c.show();
}
}
三:注意:
(1)抽象类中可以有构造方法,供子类创建对象时初始化父类成员使用;
(2)抽象类不一定有抽象方法,抽象方法一定在抽象类中;
(3)抽象子类继承抽象方法时,不一定实现父类所有的抽象方法;
(1)对于第一个如下代码展示:
public abstract class People {
String name="李太黑";
public abstract void play();//抽象方法
public People(String name){//构造方法
System.out.println("这是抽象类构造方法"+"\t"+this.name);
System.out.println("这是局部变量"+"\t"+name);
}
}
package demo1;
public class Man extends People{
@Override//注释
public void play() {
System.out.println("至死是少年");
}
public Man(){
super("王宝弱");//会默认有
System.out.println("子类构造方法");
}
}
package demo1;
public class Demo {
public static void main(String[] args) {
Man m=new Man();
m.play();
}
}
(2)对于第三个如下代码展示:
咱们只有一个祖宗类:People ,一个父类 : Man ,两个孙子类:Child 和 Teenager,一个测试类;
package demo1;
public abstract class People {
String name="李太黑";
public abstract void play();//抽象方法
public abstract void sleep();//抽象方法
}
public abstract class Man extends People{//子类也是抽象类
@Override//注释
public void play() {
System.out.println("至死是少年");
}
}
public class Child extends Man{
@Override
public void sleep() {
System.out.println("睡得又香又甜");
}
public void eat(){
System.out.println("爱吃奶粉");
}
}
public class Teenager extends Man{
@Override
public void sleep() {
System.out.println("睡眠质量很好");
}
}
package demo1;
public class Demo {
public static void main(String[] args) {
Teenager t=new Teenager();
t.play();//实现父类的方法
t.sleep();//实现父类没有实现的祖宗类的一个抽象方法
System.out.println("=========");
Child c=new Child();
c.play();//实现父类的方法
c.eat();//特有的方法
c.sleep();//实现父类没有实现的祖宗类的一个抽象方法
}
}