Java中的抽象类和接口

抽象类

定义:
父类中的方法没有什么实际工作, 由他的的子类的 方法来完成的. 像这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstractmethod), 包含抽象方法的类我们称为 抽象类(abstract class).
代码实现:

abstract class Shape {
abstract public void draw();
}

在 draw 方法前加上 abstract 关键字, 表示这是一个抽象方法. 同时抽象方法没有方法体(没有 { }, 不能执行具体代码).
对于包含抽象方法的类, 必须加上 abstract 关键字表示这是一个抽象类.
注意:

  1. 包含抽象方法的类叫抽象类;
  2. 抽象类不能被实例化;
  3. 抽象类中可以有抽象方法,也可以有非抽象方法或成员变量;
  4. 抽象类被继承后必须重写抽象方法;
  5. 抽象类a继承抽象类b,那么抽象类a可以重写或不重写抽象类b中的抽象方法;
  6. 抽象类不能是private的;

抽象类的作用:
抽象类存在的最大意义就是为了被继承.
抽象类本身不能被实例化, 要想使用, 只能创建该抽象类的子类. 然后让子类重写抽象类中的抽象方法.这样使用抽象类相当于多了一重编译器的校验.

接口

接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含
静态常量.
语法规则:

interface IShape {
		void draw();
	}
	class Cycle implements IShape {
		@Override
		public void draw() {
			System.out.println("○");
		}
	}
	public class Test {
		public static void main(String[] args) {
		IShape shape = new Rect();
		shape.draw();
	}
}

1、接口中的关键字 interafce
2、接口中的方法都不能有具体的实现,都是默认为抽象方法;(public abstract)
3、接口中的方法尽量简洁。
4、接口中的成员变量都是默认为静态的。(Public static final)

interface IShape {
void draw();
public static final int num = 10;
}

其中的 public, static, final 的关键字都可以省略. 省略后的 num 仍然表示 public 的静态常量.
5、接口不能被实例化。接口存在的意义是继承;
6、Java中只支持单继承,接口就是满足多继承;

class Animal {
	protected String name;
	public Animal(String name) {
		this.name = name;
	}
}
interface IFlying {
	void fly();
}
interface IRunning {
	void run();
}
interface ISwimming {
	void swim();
}
class Frog extends Animal implements IRunning, ISwimming {
	public Frog(String name) {
		super(name);
	}
	@Override
	public void run() {
		System.out.println(this.name + "正在往前跳");
	}
	@Override
	public void swim() {
		System.out.println(this.name + "正在蹬腿游泳");
	}
}

Java中只能是单继承,但可以实现多个接口。上述代码就是一个类继承一个父类, 同时实现多种接口的例子。
7、接口之间可以继承,但不能实现;
Implements:实现
1、类和接口之间的关系叫实现
2、只要类实现这个接口,那么接口中的方法必须重写。
接口间的继承:

interface IRunning {
void run();
}
interface ISwimming {
void swim();
}
// 两栖的动物, 既能跑, 也能游
interface IAmphibious extends IRunning, ISwimming {
}
class Frog implements IAmphibious {
...
}

通过接口继承创建一个新的接口 IAmphibious 表示 “两栖的”. 此时实现接口创建的 Frog 类, 就继续要实现 run 方法,
也需要实现 swim 方法.
注意:
抽象类中可以包含普通方法和普通字段, 这样的普通方法和字段可以被子类直接使用(不必重写), 而接口中不
能包含普通方法, 子类必须重写所有的抽象方法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值