抽象类和接口
转载:https://blog.csdn.net/qq_37766026/article/details/90702387
https://www.jianshu.com/p/93d701282bd9
一、抽象类
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就可以称之为抽象类。
1.抽象方法:使用abstract修饰且没有方法体的方法。
特点:
① 抽象方法没有方法体,交给子类实现
② 抽象方法修饰符不能是private final static(如果是private则子类无法访问,final则子类无法继承,static是类就可以使用,但抽象方法是在子类实现后才可用)
③ 抽象方法必须定义在抽象类或者接口中
2.抽象类:包含抽象方法的类,即使用abstract修饰的类。
特点:
① 抽象类不能被实例化,只能被继承
② 抽象类中可以不包含抽象方法(不包含抽象方法就没有太大意义,可以作为工具类防止被实例化)
③ 抽象类的子类可以不实现该类所有的抽象方法,但也必须作为抽象类(抽象派生类)
④ 抽象类的构造方法不能定义成私有(子类构造方法会调用父类构造方法)
⑤ 抽象类不能使用final修饰,final修饰的类不能被继承
public class Test3 { public static void main(String[] args) { Gun gun = new Gun("机关枪"); Grenade grenade = new Grenade("手榴弹"); gun.attack(); grenade.attack(); gun.how2Attack(); grenade.how2Attack(); } } abstract class Weapon{ String name; public void attack(){ System.out.println(name+"具有攻击行为"); } abstract void how2Attack(); } class Gun extends Weapon{ public Gun(String name) { this.name = name; } @Override void how2Attack() { System.out.println(name+"射击敌人"); } } class Grenade extends Weapon{ public Grenade(String name){ this.name = name; } @Override void how2Attack() { System.out.println(name+"丢向敌人"); } }
二 、Java中的接口:在JAVA编程语言中是接口一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。
特点:
① 接口中没有构造器,不能被实例化
② 接口只能继承接口,不能继承类,接口支持多继承
③ 接口中的定义的成员变量,默认是public static final修饰的静态常量
④ 接口中定义的方法,默认是public abstract修饰的抽象方法
⑤ 接口中定义的内部类,默认是public static修饰的静态内部类
(1)Java中抽象类和接口中有构造方法吗?
①在接口中 不可以有构造方法
在接口里写入构造方法时,编译器提示:Interfaces cannot have constructors。
A. 构造方法用于初始化成员变量,但是接口成员变量是常量,无需修改。接口是一种规范,被调用时,主要关注的是里边的方法,而方法是不需要初始化的,
B. 类可以实现多个接口,若多个接口都有自己的构造器,则不好决定构造器链的调用次序
C. 构造器是属于类自己的,不能继承。因为是纯虚的,接口不需要构造器。
抽象类中不一定有抽象方法,抽象方法一定存在于抽象类中。
继承抽象类的可以是普通类,但必须重写抽象类中的所有抽象方法,也可以是抽象类,无需重写抽象类中的所有抽象方法。
posted on 2019-10-08 16:09 sunshineicy 阅读(115) 评论(0) 编辑 收藏 举报