Java之抽象类与接口

抽象类

1、为什么需要抽象类?
因为在多态的前提下,父类的方法体始终是冗余的,即永远不会被执行
2、抽象类是什么?
没有方法体的方法为抽象方法,含有抽象方法的类为抽象类(abstract修饰)

抽象类:

package sun;

public abstract class Mammal {//abstract修饰的类为抽象类

	public void eat() {//抽象类中可以有具体的方法
		System.out.println("正在吃......");
	}

	public Mammal(int age){//抽象类中可以定义构造方法
		
	}

	public abstract void move();//抽象方法没有方法体
}

抽象类的实现类:

package sun;

public class Whale extends Mammal{

	@Override           //对抽象方法重写
	public void move() {//实现抽象类中的抽象方法
		System.out.println("靠鳍移动......");
	}
}

测试类:

package sun;

public class Test {

	public static void main(String[] args) {
		Mammal mammal = new Whale();
		mammal.move();//抽象类中的抽象方法(在子类中被实现)
		mammal.eat();//抽象类中的普通方法

		//Mammal m = new Mammal();    抽象类不能创建对象
	}
}

注:抽象类的特点

1、如果类中含有抽象方法,则该类必须为抽象类,即abstract修饰所修饰的类
2、抽象类中可以没有抽象方法
3、抽象类不能创建对象
4、抽象类中的抽象方法必须由子类实现(重写);子类如果没有实现全部或部分父类中的抽象方法,则这个子类也必须为抽象类
5、抽象类中可以有具体的方法
6.抽象类中虽然不能创建对象,但是可以定义构造方法,也可以定义普通的方法,该方法均用于子类调用
7、抽象类不能被final修饰

结果:

靠鳍移动......
正在吃......

接口

1、什么是接口?
抽象类中可以包含任意合法的方法,可以包含任意合法的成员变量;
但如果一个抽象类中有且只有抽象方法,则该抽象类可以定义为接口。
2、怎么定义接口?
接口类使用interface关键字定义接口;
实现类通过implements关键字定义,来实现该接口的抽象方法

接口:

package sea;

public interface IMammal extends I,II{//(I、II为另外两个接口)普通类只能单继承,但接口可以多继承多个接口

	int age = 20;//此处省略了public static final
	void move();//此处省略了public abstract
	
	//JDK8即以后的版本,可以定义多个default或static修饰的具体方法
	public static void eat() {
		System.out.println("正在吃......");
	}
	
	public default void breath() {
		System.out.println("正在呼吸......");
	}
}

接口的实现类:

package sea;

public class Whale implements IMammal{

	@Override
	public void move() {//对接口中抽象方法的实现
		System.out.println("靠鳍游动......");
	}
}

测试类:

package sea;

public class Test {

	public static void main(String[] args) {
		IMammal mammal = new Whale();
		mammal.move();
		IMammal.eat();//接口中定义的static修饰的具体方法,可以直接通过接口名调用
	
	//	System.out.println(IMammal.age);      可以直接用类名调用,说明是static
	//	IMammal.age = 30;                     不能被重新赋值,说明是final
	}
}

注:接口的特点

1、一个类没有实现完接口的所有方法,则该类必须定义为抽象类(abstract)
2、接口不能创建对象,且接口中没有构造方法
3、接口名常常以I开头
4、接口中抽象方法默认为public abstract,所以接口中定义抽象方法时可以省略public abstract
5、抽象类中可以定义任意合法的成员变量;但是接口中只能定义public static final常量(可省略)
6、JDK8以前版本中,接口只能含有常量和抽象方法;JDK8即以后的版本,可以定义多个default或static修饰的具体方法
7、Java中类只能继承一个父类;但是Java中接口可以继承多个接口,每个接口之间使用逗号间隔

结果:

靠鳍游动......
正在吃......

抽象类与接口的区别总结

区别:

           抽象类                接口 
1、定义       abstract             interface 
2、构造方法      有                  无  
3、继承      只能单继承             可以继承多个接口 
4、实现       extends              implements  
5、成员变量 可以定义任意合法的成员变量     只能定义public static final修饰的常量  
6、方法       可以定义任意合法的方法     只能定义抽象方法(JDK8即以上可以定义多个static或default修饰的方法)

注:
定义接口的抽象方法时,可以省略public abstract
定义接口的常量时,可以省略public static final

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值