<Zhuuu_ZZ>抽象类和接口

抽象类和接口

一.抽象类

在java中,当一个类的方法被abstract关键字修饰时,该方法称为抽象方法。抽象方法所在的类必须定义为抽象类。
当一个方法被定义为抽象方法后,意味着该方法不会有具体的实现,而是在抽象类的子类中通过方法重写进行实现。
语法格式为:[访问修饰符]<返回类型><方法名>([参数列表]);
**注意:**1.抽象方法只能定义在抽象类中。但是抽象类中可以包含抽象方法,也可以包含普通方法,还可以包含普通类包含的一切成员。
2. 抽象类可以没有抽象方法,但包含了抽象方法的类必须定义为抽象类
3.如果子类没有实现父类的所有抽象方法,子类必须被定义为抽象类
4.没有抽象构造方法(构造方法即创建对象就是为了实例化),也没有抽象静态方法(静态方法可以通过类名.方法出来
5.属性必然是具体的,需要去实例化的
让我们具体分析一下:
父类:可以看出它是一个抽象类,但是它具有抽象方法和普通方法

public abstract class Man {
    String name;
    String sex;
    int age;
    double height;
    double weight;
    public abstract  void eat();
    public abstract void drink();
    public void shit(){
        System.out.println("Shit!!!");
    }
    public void sleep(){
        System.out.println("睡就是了");
    }
}

子类:所以在子类中我们要实现父类的抽象方法就必须重写方法,而对于父类的普通方法就可以继承过来。

public class Student extends Man {
    @Override
    public void eat() {
        System.out.println("去食堂吃饭");
    }
    @Override
    public void drink() {
        System.out.println("喝饮水机的水"); }
        @Override
    public void shit() {
        super.shit();
    }
    @Override
    public void sleep() {
        super.sleep();
    }
}

二.接口

需要知道的十二条原则:
1.如果抽象类中所有的方法都是抽象方法,就可以使用java提供的接口来表示。
2.定义接口使用interface关键字
实现接口使用implements关键字
3.接口中不能有构造方法;
4.接口的抽象方法只能由public 修饰
5.接口不能被实例化
6.实现类必须实现接口的所有方法,除非是抽象类
7.实现类可以实现多个接口,用逗号隔开
8.接口中的所有方法默认都是公共抽象方法
9.接口的目的之一是订立一个标准
10.接口里的属性都是 public static final int LENGTH=10;静态常量,而且必须被初始化且赋值。因为是final,所以变量必须全大写。
11.接口中啥都没有表示实现这个接口时都是此接口的子类
12.一个接口不能实现另一个接口,但能继承多个接口。
搞一个例子来使这些说法具体形象化吧:
组装一台电脑,使得其cpu,内层,硬盘等参数显示出来。
首先先是写三大接口:

public interface CPU {
    String cpu();
    double cpu1();

}
public interface EMS {
    String ems();
    int ems1();

}
public interface HardDisk {
    int yinpan();
}

然后实现三大接口:

public class GetCPU implements CPU {
    @Override
    public String cpu() {
        return "Intel";
    }

    @Override
    public double cpu1() {
        return 3.2;
    }
}

public class GetEMS implements EMS {
    @Override
    public String ems() {
        return "三星"; }
    @Override
    public int ems1() {
        return 32; }}
public class GETHardDisk implements HardDisk {
    @Override
    public int yinpan() {
        return 512; }}

然后写一个主装类,并且测试它

public class ZuZhuang {
    public void show(CPU c,EMS e,HardDisk h){
        System.out.println("电脑的cpu是"+c.cpu()+"主频是"+c.cpu1()+
                "\n内存是"+e.ems()+"有"+e.ems1()+"\n硬盘是"+h.yinpan()); }
    public static void main(String[] args) {
        ZuZhuang z=new ZuZhuang();
        CPU c=new GetCPU();
        EMS e=new GetEMS();
        HardDisk h=new GETHardDisk();
        z.show(c,e,h); }}

最后输出结果是:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值