5.2 抽象类和接口

  • 类:属性(0或多个)+方法(0或多个)
  • 一个完整(健康)的类:所有的方法都有实现(方法体)
  • 类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类
  • 一个完整的类才可以被实例化,被new出来
  • 如果一个类暂时有方法未实现,需要被定义为抽象类
public abstract class Shape{
	int area;
	public abstract void calArea();//我们不知道物体的形状,所以不知道面积
}
  • 抽象类关键字abstract声明
  • 抽象类的组成
    - (optional)成员变量,个数不限
    - (optional)具体方法,方法有实现,个数不限
    - (optional)抽象方法,加abstract关键字,个数不限
  • 抽象类也是类。一个类继承于抽象类,就不能继承于其他的(抽象)类。
  • 子类可以继承于抽象类,但是一定要实现父类们所有abstract的方法。如果不能完全实现,那么子类也必须被定义为抽象类。
  • 只有实现父类(们)的所有抽象方法,才变成完整类。
public abstract class Shape {
    //面积
    int area;
    //计算面积方法
    public abstract void calArea();
}
//继承自Shape抽象类
public class Rectangle extends Shape{

    int width;
    int length;

    public Rectangle(int length, int width){
        this.length = length;
        this.width = width;
    }
    public void calArea(){
        System.out.println(this.length * this.width);
    }
    public static void main(String[] args){
        Rectangle rect = new Rectangle(10, 5);
        rect.calArea();
    }
}

运行结果

50
  • 如果类的所有方法都没有实现,那么这个类就算是接口interface。
public interface Animal{
	public void eat();
	public void move();
}
  • 接口不算类,或者说是“特殊”的类
  • 类只可以继承(extends)一个类,但是可以实现(implements)多个接口,继承和实现可以同时。
  • 接口可以继承(多个)接口,没有实现的方法将会叠加
  • 类实现接口,就必须实现所有未实现的方法。如果没有全部实现,那么只能成为一个抽象类。
  • 接口里可以定义变量,但是一般是常量
public interface Animal {
	public void eat();
	public void move();
}
public class Cat implements Animal
{
	public void eat() {
		System.out.println("Cat: I can eat");
	}
	
	public void move(){
		System.out.println("Cat: I can move");
	}
}

public abstract class LandAnimal implements Animal {

	public abstract void eat() ;

	public void move() {
		System.out.println("I can walk by feet");
	}
}

public interface ClimbTree {
	public void climb();
}

public class Rabbit extends LandAnimal implements ClimbTree {

	public void climb() {
		System.out.println("Rabbit: I can climb");		
	}

	public void eat() {
		System.out.println("Rabbit: I can eat");		
	}
}

public interface CatFamily extends Animal, ClimbTree{
	//包含以下三个方法
	//eat()
	//move()
	//climb()
}

public class Tiger implements CatFamily {
	//必须实现CatFamily中的三个方法
	public void eat() {
		System.out.println("Tiger: I can eat");
	}

	public void move() {
		System.out.println("Tiger: I can move");
	}

	public void climb() {
		System.out.println("Tiger: I can climb");
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值