一、抽象类和接口

一、类中声明一个方法,这个方法没有实现体,是一个空方法,这样的方法叫抽象方法,使用abstract修饰符号

当一个类有抽象方法时候,必须声明为抽象类

1.声明一个父类(父类类声明一个抽象方法,则父类必须声明为抽象类abstract修饰)

package property;
//为Hero增加一个抽象方法,必须把Hero声明为abstract。
public abstract class Hero{
    String name;
    float hp;
    float armor;
    int moveSpeed;
    
    public static void main(String[] args){
    }
    //抽象方法attack
    //Hero的子类会被要求实现attack方法
    public abstract void attack();
}
View Code

2.子类一

package property;
public class ADHero extends Hero{
    public void physicAttack(){
        System.out.println("进行物理攻击");
    }
    @Override
    public void attack(){//继承父类的同事,必须实现父类里的抽象类
        physicAttack();
    }
}
View Code

3.子类二

package property;
public class APHero extends Hero{
    public void magicAttack(){
        System.out.println("进行魔法攻击");
    }
    @Override
    public void attack(){//继承父类的同事,必须实现父类里的抽象类
        magicAttack();
    }
}
View Code

二、类可以在不提供抽象方法的前提下,直接声明为抽象类。但是一旦被声明为抽象类,就不能狗直接实例化。

public class Hero extends Object{
    String name;
    float hp;
    float armor;
    int moveSpeed;
    
    public static void main(String[] args){
//虽然没有抽象方法,但是被声明了抽象类,不能进行实例化操作。
        Hero h=new Hero();
    }
}
View Code

三、抽象类和接口的区别

子类只能继承一个抽象类,也印证了java只能单继承

子类可以继承多个接口

抽象类可以定义为public,protected,package,private,有静态属性,非静态属性,final和非final属性

接口中的属性只能是public,静态,final的

package property;
public interface AD{
    public static final int moveSpeed=100;
    float hp;//hp没有显式声明为public static final,但是它默认就是这个
    public void magicAttack();
    int moveSpeed();//方法没有显式声明为public,接口中默认方法为public
}
View Code
原文地址:https://www.cnblogs.com/drq1/p/8466349.html