java中write方法作用_Java 中的抽象类/抽象方法,大家明白怎么用了么?

  在学习Java的时候,有一段时间对Java里的抽象类一直发怵(其实现在也还是发怵)。总觉得这个类很神秘,不像public的光明磊落,也不像private的犹抱琵琶半遮面,更不像protected的义气冲天。

     今天我们就来会一会abstract---抽象类

     在面向对象概念中,所有的对象都是通过类来描述的,但是反过来,不是所有的类都是都是用来描述对象的。如果一个类中没有包含足够的信息来描绘一个具体的对象,这个类就是抽象类

      抽象类不能实例化对象,比如

      e06da621d64b34cfe93c4e215d4f6785.png

会提示: 类是抽象的,不能被实例化

但是类的其它功能依然存在,比如成员变量、成员方法和构造方法的访问方式和普通类一样。

如下显示:

public abstract class Employee {private String name;    private String address;    private int number;    public Employee(String name,String address,int number){  //构造方法        System.out.println("Construction an Employ");        this.name = name;        this.address = address;        this.number = number;    }public double computePay(){
System.out.println("Inside Employee computePay"); return 0.0; }

有构造方法、类变量和普通方法(这里为什么要说普通方法呢,稍后我们再看)

因为抽象类不能被实例化,所以抽象类必须要被继承,才能被使用

在Java中抽象类表示的是一种继承关系,一个类只能继承一个抽象类,而一个类却可以实现多个接口。

尽管我们不能实例化抽象类的对象,但可以通过抽象类的子类来进行实例化,让子类的对象来来继承父类抽象类的各种方法、类变量和构造方法

如下:

public abstract class Employee {private String name;    private String address;    private int number;    public Employee(){
System.out.println("Hello"); }public Employee(String name,String address,int number){ //构造方法 System.out.println("Construction an Employ"); this.name = name; this.address = address; this.number = number; }public double computePay(){
System.out.println("Inside Employee computePay"); return 0.0; }public void mailCheck(){
System.out.println("Mailing a check to " + this.name + " " + this.address); }public String toString(){return name + " " + address + " " + number; }public String getName() {return name; }public String getAddress() {return address; }public void setAddress(String newAddress) {this.address = newAddress; }public int getNumber() {
System.out.println("getName"); return number; }

然后我们创建一个子类

public class AbstractDemo extends Employee{public static void main(String[] args) {
Employee employee = new Employee("1","2",1) {@Override public double computePay() {return super.computePay(); }@Override public void mailCheck() {super.mailCheck(); }@Override public String toString() {return super.toString(); }@Override public String getName() {return super.getName(); }@Override public String getAddress() {return super.getAddress(); }@Override public void setAddress(String newAddress) {super.setAddress(newAddress); }@Override public int getNumber() {return super.getNumber(); }
}; employee.computePay(); employee.getAddress(); employee.getName(); employee.getNumber(); employee.mailCheck(); employee.setAddress("北京"); employee.toString(); }

在子类实例化父类后,可以调用父类中的方法,得出结果

Construction an Employ
Inside Employee computePay
getName
Mailing a check to 1 2

如果一个非抽象类中有了抽象方法,可以运行吗?

我们来看个例子

ba784283d535b80184d57d838f2383bc.png

按照程序要求,是不可以的,如果类中出现抽象类,则该类必须要是抽象类

写完文章后,发现有一个地方写错了,大家有找到的吗?

哭了,我写完后发现有个地方写错了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值