我的JAVA笔记--抽象类

抽象类

抽象类的主要作用在于对子类中覆写方法进行约定,在抽象类里定义一些抽象方法,抽象方法是使用了abstract关键字并且未提供方法体的方法,抽象方法所在的类必须为抽象类(也可能是接口,但接口中所有的方法都不能有方法体),抽象类必须使用abstract关键字进行定义

abstract class Message1{   //定义抽象类
    private String msg;
    public abstract void getInfo() ;  //抽象方法
    public void setMsg(String msg){  //普通方法
        this.msg = msg;
    }
    public String getMsg(){  //普通方法
        return this.msg;
    }
}

抽象类是不可以直接new的,如果要想使用抽象类:
1.抽象类必须提供有子类,子类使用extends继承一个抽象类(一个子类只能继承一个类)
2.抽象类的子类(该子类不是抽象类)一定要覆写抽象类中的所有抽象方法
3.抽象类的对象实例化可以利用对象多态性通过子类向上转型完成

class Amessage extends Message1{
    @Override //覆写
    public void getInfo() {
        System.out.println("xxxxxxxxxx");
    }
}
public class demo01 {
    public static void main(String[] args) {
        Message1 message1 = new Amessage();
        message1.getInfo();
        message1.setMsg("aaaaaaaa");
        System.out.println(message1.getMsg());
    }
}

-----------------------------------------------------
结果:
xxxxxxxxxx
aaaaaaaa
-----------------------------------------------------

关于抽象类的使用:
1.注意:抽象类无法自己实例化。
2.使用抽象类是为了解决继承时所带来的的代码重复处理。
3.不能使用final修饰一个抽象类,因为抽象类必须有子类,而final定义的类是不能有子类的。
4.抽象类是在普通类上扩展的,即只是在普通类里追加抽象方法,所以抽象类中可以有属性和普通方法,也可以有构造方法,并且子类也一定会按照子类对象的实例化原则进行父类构造调用。
5.抽象类中可以没有抽象方法,但是也不可以直接实例化。

abstract class Message1{   //抽象类
    private String msg;
    public Message1(String msg){ //有参构造
        this.msg = msg;
    }
    public abstract void getInfo() ;  //抽象方法
    public void setMsg(String msg){  //普通方法
        this.msg = msg;
    }
    public String getMsg(){  //普通方法
        return this.msg;
    }
}
class Amessage extends Message1{
    public Amessage(String msg){  //有参构造
        super(msg); //调用父类有参构造
    }
    @Override
    public void getInfo() {
        System.out.println("xxxxxxxxxx");
    }
}
public class demo01 {
    public static void main(String[] args) {
        Message1 message1 = new Amessage("aaaaaaaa");
        message1.getInfo();
        System.out.println(message1.getMsg());
    }
}

6.抽象类可以提供有static方法,并且方法不受到抽象的影响

abstract class Message1{   //抽象类
    public abstract void getInfo() ;  //抽象方法
    public static Message1 getInstance(){  //static方法
        return new Amessage();
    }
}
class Amessage extends Message1{
    @Override
    public void getInfo() {
        System.out.println("xxxxxxxxxx");
    }
}
public class demo01 {
    public static void main(String[] args) {
        Message1 message1 = Message1.getInstance();
        message1.getInfo();
    }
}

---------待补充------------
final、private、static关键字不能与abstract共存
被abstract修饰的方法在被子类继承时全都要重写实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值