Java->抽象类与接口

1、抽象类

抽象类用来定义子类的公共方法的模板。例如:将人定义成一个抽象类,里面定义一个抽象方法->我有一双手,声明一个学生类继承人这个类,那么学生类就可以实现我的一双手是用来学习、写字的;声明一个农民类继承人这个类,那么农民类就可以实现我的一双手是用来种地,为人民生产粮食,解决大众温饱的(下面有代码示例)
1、抽象类和抽象方法都需要被abstract修饰
2、抽象类不可被实例化;
3、抽象类有构造方法,便于子类实例化;
4、抽象类中可有抽象方法,也可有非抽象方法,抽象方法只有方法声明,没有方法体;
5、抽象类的子类(这个子类非抽象类)需要重写抽象类中的抽象方法;
6、abstract不能用来修饰私有方法、静态方法、final修饰的方法,因为抽象方法需要子类来重写方法;
代码示例:

public class Test {
    public static void main(String[] args) {
        //报错,抽象类不可被实例化
        //XiaoQi xiaoQi = new XiaoQi();

        XiaoQi xiaoQi = new Xiaoqi1();
        xiaoQi.absMethod01();
        xiaoQi.absMethod02();
    }
}


class Xiaoqi1 extends XiaoQi{
    @Override
    public void absMethod01() {
        System.out.println("XiaoQi类->继承重写类,重写抽象方法01");
    }

    @Override
    public void absMethod02() {
        System.out.println("XiaoQi类->继承重写类,重写抽象方法02");
    }
}

abstract class XiaoQi{

    //抽象方法
    public abstract void absMethod01();
    //抽象方法
    public abstract void absMethod02();

    //非抽象方法
    public void noAbsMethod01(){
        System.out.println("非抽象方法01");
    }
}

输出内容:
XiaoQi类->继承重写类,重写抽象方法01
XiaoQi类->继承重写类,重写抽象方法02

1.1、抽象类的匿名子类

方便而已,代码写法示例如下:

public class Test {
    public static void main(String[] args) {
        //写法一:
        XiaoQi xiaoQi = new XiaoQi() {
            @Override
            public void absMethod01() {
                System.out.println("1->抽象类的匿名子类01");
            }
            @Override
            public void absMethod02() {
                System.out.println("1->抽象类的匿名子类02");
            }
        };
        method(xiaoQi);
        System.out.println("++++++++++++++++++++++++++++++++++");
        //写法二:
        method(new XiaoQi() {
            @Override
            public void absMethod01() {
                System.out.println("2->抽象类的匿名子类02");
            }

            @Override
            public void absMethod02() {
                System.out.println("2->抽象类的匿名子类02");
            }
        });
    }

    public static void method(XiaoQi xiaoQi){
        xiaoQi.absMethod01();
        xiaoQi.absMethod02();
    }
}

abstract class XiaoQi{

    //抽象方法
    public abstract void absMethod01();
    //抽象方法
    public abstract void absMethod02();

    //非抽象方法
    public void noAbsMethod01(){
        System.out.println("非抽象方法01");
    }
}

输出内容:
1->抽象类的匿名子类01
1->抽象类的匿名子类02
++++++++++++++++++++++++++++++++++
2->抽象类的匿名子类02
2->抽象类的匿名子类02

2、接口

1、接口是一种规范,弥补了抽象类单继承的缺点;
2、接口抽取了几个类共有的一些行为特征,需要每个类去实现自己的行为特征,接口是一种非继承的关系;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值