abstract修饰符
抽象类就是当类和类之间有相同特征时,将这些共同的特征提取出来,形成的就是抽象类。
抽象类的特点:
- 抽象类和抽象方法必须使用abstract 关键字修饰:publicabstract class 类名 / public abstract void eat();
- 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类
- 抽象类不能实例化
那么抽象类如何实例化呢?参照多态的方式,通过子类对象实例化,这叫抽象类多态- 抽象类的子类
要么重写抽象类中的所有抽象方法
要么是抽象类
例如:
//抽象类Animal,父类
abstract class Animal {
}
//抽象类Bird,子类
abstract class Bird extends Animal {
}
//非抽象类:Cat,子类
class Cat extends Animal {
}
- 抽象类就是用来被继承的,子类可以是抽象类,也可以是非抽象类。
- 非抽象子类继承了抽象父类,必须重写父类的抽象方法,可以有自己的方法,但不能是抽象方法;
- 抽象子类继承了抽象父类,不需要重写父类的抽象方法,可以有自己的方法,但必须是抽象方法;
抽象类的成员特点:
- 成员变量:
可以是变量也可以是常量- 构造方法:
有构造方法,但是不能实例化
构造方法的作用是用于子类访问父类数据的初始化- 成员方法:
可以有抽象方法:限定子类必须完成某些动作
也可以有非抽象方法:提高代码复用性
子类调用父类构造方法:
//抽象类Animal,父类
abstract class Animal {
public Animal() {
}
}
//抽象类Bird,子类
abstract class Bird extends Animal {
public Bird() {
super();
}
}
//非抽象类:Cat,子类
class Cat extends Animal {
public Cat() {
super();
}
接口
接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用Java中的接口更多的体现在对行为的抽象。
接口与抽象类的代码案例示例:
//Person
package Sport;
public abstract class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
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;
}
}
//Sporter
package Sport;
public abstract class Sporter extends Person{
public Sporter() {
}
public Sporter(String name, int age) {
super(name, age);
}
public abstract void study();
}
//Coach
package Sport;
public abstract class Coach extends Person{
public Coach() {
}
public Coach(String name, int age) {
super(name, age);
}
public abstract void teach();
}
//English
package Sport;
public interface English {
public abstract void SpeakEnglish();
}
//PingPongSporter
package Sport;
public class PingPongCoach extends Coach implements English{
public PingPongCoach() {
}
public PingPongCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("乒乓球教练交乒乓球");
}
@Override
public void SpeakEnglish() {
System.out.println("乒乓球教练说英语");
}
}
//PingPongCoach
package Sport;
public class PingPongCoach extends Coach implements English{
public PingPongCoach() {
}
public PingPongCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("乒乓球教练交乒乓球");
}
@Override
public void SpeakEnglish() {
System.out.println("乒乓球教练说英语");
}
}
//BasketBallCoach
package Sport;
public class BasketBallCoach extends Coach{
public BasketBallCoach() {
}
public BasketBallCoach(String name, int age) {
super(name, age);
}
@Override
public void teach() {
System.out.println("篮球教练教篮球");
}
}
//BasketBallSporter
package Sport;
public class BasketBallSporter extends Sporter{
public BasketBallSporter() {
}
public BasketBallSporter(String name, int age) {
super(name, age);
}
@Override
public void study() {
System.out.println("篮球运动员学篮球");
}
}
//SportDemo
package Sport;
public class SportDemo {
public static void main(String[] args) {
PingPongSporter pps=new PingPongSporter("刘星",23);
System.out.println(pps.getName()+","+pps.getAge());
pps.study();
pps.SpeakEnglish();
BasketBallSporter bbs=new BasketBallSporter();
bbs.setName("乔丹");
bbs.setAge(25);
System.out.println(bbs.getName()+","+bbs.getAge());
bbs.study();
}
}