认识abstract
abstract一般用来修饰类和方法,不能修饰变量
1.abstract修饰类
abstract修饰类,会使得类变成抽象类,抽象类不能生成实例,但是可以作为对象变量声明的类型,也就是编译时类型。抽象类相当于类的半成品,需要子类继承并覆盖其中的方法。
注意:
抽象类虽然不能实例化,但是有自己的构造方法。
抽象类和接口(interface)有很大的不同之处,接口中不能有实例方法去实现业务逻辑,而抽象类可以有实例方法,并实现业务逻辑。
抽象类不能被final修饰,因为被final修饰的类无法被继承,而对于抽象类来说就是需要通过继承去实现抽象方法。
2.abstract修饰方法
abstract修饰方法会使得这个方法变成抽象方法,也就是只有声明,而没有实现,需要子类重写。
注意:
有抽象方法的类一定是抽象类,但是抽象类不一定有抽象方法。
父类是抽象类,其中有抽象方法,那么子类继承父类,并把父类中的所有抽象方法都实现了,子类才有创建对象实例的能力,否则子类也必须是抽象类。抽象类中可以有构造方法,子类在构造子类对象时需要调用父类(抽象类)的构造方法。
抽象方法不能用private修饰,因为抽象方法必须被子类重写,而private权限对于子类来说是不能访问的,所以就会产生矛盾。
抽象方法也不能用static修饰,如果用static修饰了,那么我们就可以直接通过类名调用了,而抽象方法压根没有主体,没有任何业务逻辑,这样就毫无意义了。
抽象类(abstract)和接口类(interface)的共同点:不能实例化
抽象类(abstract)和接口类(interface)的不同点:
- 抽象类可以声明变量,接口类不能
- 抽象类可以有实例方法,接口类没有
- 抽象类有构造方法,接口类没有
- 抽象类的子类可以直接调用父类(抽象类)的实例方法
创建abstract修饰的person抽象类
public abstract class person {
private String name;
private Integer age;
//无参构造方法
public person() {
System.out.println("我是person抽象类,我被调用了");
}
//有参构造方法
public person(String name, Integer age) {
this.name = name;
this.age = age;
}
//实例方法
public void sleep(){
System.out.println("睡觉");
}
//抽象方法
public abstract void eat();
}
创建boss子类继承person抽象类
public class boss extends person{
public void eat(){
//重写父类抽象方法
System.out.println("我在吃饭");
}
public void sleep(){
//覆盖父类的方法
System.out.println("boss在睡觉");
}
public static void main(String[] args) {
//person boss = new boss(); //可以通过父类来接收实例化对象
boss boss = new boss(); //在new 一个子类对象时会优先调用父类(这里指的是抽象类person)的构造器初始化,然后再调用子类的构造器。
boss.sleep();
boss.eat();
}
}
运行结果:
纯属个人经验,喜欢的可以点赞关注,后续见!!!
今天的文章java abstract修饰符用法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33369.html