Java-abstract抽象类和interface接口

抽象类

抽象类 不可以实例化

抽象类可以有构造器
抽象类可以有main方法,并且我们可以运行它
抽象类 中既可以有抽象方法,也可以有非抽象方法,抽象方法没有方法体({ } 花括弧) 抽象类可以继承非抽象类、抽象类
抽象类 可以单个或多个接口,但是只能继承一个类 抽象类只能是public、默认修饰,不能使用protected、private修饰
抽象类 中可以定义变量、静态变量,final变量
抽象类 可以有静态代码块和静态方法

抽象方法 没有方法体 抽象方法只存在于接口和抽象类中,普通类不能声明抽象方法
抽象方法 可以是public、protected、默认,但是不能用private
抽象方法 必须为public或者protected(因为如果为private,则不能被子类继承,子类便无法实现该方法

继承 抽象类 效率比 实现 接口 效率比较高

public class AbatractDemo {
	
	abstract class Animal {
		
	}
	
	abstract class Pig extends Animal{
		// 抽象类中变量
		String name;
		static int age = 19;
		final String color = "white";
		
		// 抽象类的构造方法
		public Pig() { }
		// 抽象类的普通方法
		public void eat() { }
		
		// 抽象方法没有方法体 也就是{}
		public abstract void run();
		// 抽象方法没有方法体 也就是{}
		public abstract void sleep();
	}
	
	// 继承抽象类,子类必须重写父类中的抽象方法
	class ColorPig extends Pig {

		@Override
		public void run() {
		}

		@Override
		public void sleep() {
		}
		
	}
	
	public static void main(String[] args) {
		// 无法实例化抽象类
		// Pig pig = new Pig();
	}
}

接口

接口 不能实例化
接口 没有构造方法
接口 没有main方法,因此不能运行它

接口 只能用public和默认,不能使用static、private、protect、final修饰

接口 中的 方法 不能用static修饰
接口 中的 方法 没有方法体,方法默认的修饰符是 public abstract 接口中变量默认的修饰符是public final static (这三个修饰符不需要顺序可以随便放)

接口 不能实现(implements)接口
接口 不能继承(extends)类(普通类、抽象类)

接口可以多继承(extends)接口

实现接口必须重写接口中的所有方法

接口中的 变量 会被隐式地指定为 public static final 变量,并且只能是 public static final 变量,用private、protected 修饰会报编译错误
接口中的 方法 会被隐式地指定为 public abstract 方法,并且只能是 pulic abstract 方法,用其他关键字,比如private、protected、static、 final等修饰会报编译错误

接口中不能含有静态代码块以及静态方法

JAVA8 中接口可以定义非抽象方法,但必须使用default或者staic关键字来修饰,必须有方法体{}

public class InterfaceDemo {
	
	interface Animal {
		final public static  int age = 100;
		// 接口中属性默认的修饰符是 public final static
		String name = "Animal";
		// 接口中的方法没有方法体
		public void eat();
		// 接口中方法默认的修饰符是 public abstract
		void sleep();
	}
	
	
	class Cat implements Animal{
		
		@Override
		public void eat() {
			System.out.println();
		}

		@Override
		public void sleep() {
		}
	}
}

抽象类和接口相同点
类型抽象类接口
方法抽象方法没有方法体接口中所有方法都没有方法体
实例化抽象类不能实例化接口不能实例化
抽象类和接口不同点
类型抽象类接口
速度相对快相对慢
构造器抽象方法可以有构造方法接口没有构造方法
main方法抽象类可以有main方法接口没有mian方法
继承或实现子类使用extends关键字来继承抽象类,如果子类不是抽象类的话,需要重写抽象类中的抽象方法子类使用关键字implements来实现接口,需要重写接口中所有方法
与正常Java类区别抽象类不能实例化,可以有抽象方法,其他和普通方法没区别接口不能实例化,接口中定义方法不能有方法体,接口中变量都是静态不能修改的常量
访问修饰符抽象方法可以是public、protected、默认,但是不能用private接口中的方法默认的修饰符是 public abstract ,不可以使用其它修饰符,接口中变量默认的修饰符是 public final static
多继承或多实现抽象类可以继承(extends)一个类和实现(implements)多个接口接口不能实现(implements)接口,不能继承(extends)类(普通类、抽象类),但是可以继承(extends)一个接口,也可以多继承(extends)接口
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值