简述抽象类和接口、抽象类区别的区别

什么是抽象类

用abstract修饰的类叫抽象类
1、抽象类不能有对象,抽象类不能实例化,不能new
2、abstract修饰的方法为抽象方法,这种方法不能有方法体(什么内容都没有)
3、抽象类不能有对象,不能new对象
4、有抽象方法的一定是抽象类,抽象类中不一定有抽象方法
5、抽象类型中的抽象方法必须在子类中被重写

抽象类不能被实例化,抽象方法必须被重写,定义它们是干嘛?

抽象类是用来被继承的,如果没有类去继承它,也就失去了意义;抽象方法生来就是被重写的,必须被重写。(只要继承了某个抽象类,就必须去重写此类中的抽象方法)

public abstract class Animal{
    
    
	public abstract void eat();
	public abstract void sleep();

}

定义了一个叫Animal的抽象类含有两个抽象方法,抽象方法后面也不能带大括号。
之后定义一个Cat类

public class Cat extends Animal{
    
    
 
	@Override
	public void eat() {
    
    
		System.out.println("猫吃鱼");
		
	}
 
	@Override
	public void sleep() {
    
    
		System.out.println("猫睡觉!");
		
	}
	
}

在这里指的注意的是:当一个类继承抽象类的时候,这个类必须去重写所继承的抽象类的抽象方法

什么是接口

接口是对抽象类的进一步抽象
接口就是某个事物对外提供的一些功能的声明,通过interface关键字完成
注:
1、接口中所有的属性默认为:public static final。。。;
2、接口中所有的方法默认为:public abstract。。。;
3、接口不需要像类一样被继承,而是用implements去实现,类和接口的关系叫实现。

public class Cat implements Sleep,Eat{
    
    
 
	@Override
	public void ioSleep(int i) {
    
    
		System.out.println("我是猫,我每天都不用睡觉!!!");
	}
 
	@Override
	public void ioEat() {
    
    
		System.out.println("我是猫,我吃猫粮!!!");
	}
}
public interface Sleep {
    
    
	public static int a = 1;
	public static int b = 2;
	public void ioSleep(int i);
 
}

public interface Eat {
    
    
	public abstract void ioEat();
}

抽象类和接口区别

1、实现方法:
抽象类中可以有已经实现的方法,因为存在抽象方法,所以必须是抽象类

接口中只能包含抽象方法,抽象方法是没有被实现的,只能被重写
2、子类使用的关键词不一样
抽象类使用extends来继承,抽象类就是用来被继承的,所包含的抽象方法也需要被重写

接口使用implement关键字来实现,提供接口中所有声明方法的实现
(抽象类是将梦想传给家族,一代一代去完成。那么接口就是掌门人找大师兄来完成帮派的鸿星伟业,这时候就只有一次希望,要么有能力就实现,没能力就不要接。)
3、是否有构造器(构造函数)
抽象类是类,所有有类的所有特性,是不能被实例化,但可以有构造器

接口是不能有构造器的,是所包含的所有抽象方法的集合
4、修饰符
抽象类可以有public、protected、default这些修饰符

接口只有一个修饰符public
5、运行速度
抽象方法快

接口运行满,需要时间寻找在类中实现的方法
6、继承实现
抽象类中一个子类只能继承一个父类但是可以有多个接口

猜你喜欢

转载自blog.csdn.net/char_m/article/details/109625900