第十一周java总结

Java面向对象编程——接口

一、抽象类(Abstract Class)
在讲接口之前,我们得看看抽象类。如果一个类包含了没有实现的方法(抽象方法),那么这个类不能实例化,只能通过继承,在子类中实现其抽象方法,然后就可以实例化子类。有个问题,包含了抽象方法的类一定是抽象类,那么是不是抽象类就一定会含有抽象方法呢?未必。

下面我们还是通过案例来了解和掌握抽象类的用法。
1、创建Car抽象类

package net.wek11接口;

/**
 * Car抽象类
 * 作者:谯婷
 * 日期:2019.5.7
 */
public abstract class Car {
    protected  String brand;
    protected  String manufactuer;
    protected  double price;
    protected  String type;

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public String getManufactuer() {
        return manufactuer;
    }

    public void setManufactuer(String manufactuer) {
        this.manufactuer = manufactuer;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public abstract void start();
    public abstract void stop();
}

在Car这个抽象类里,包含着两个抽象方法:start()和stop()。
2、创建测试类TestCar

package net.wek11接口;

/**
 * 功能:测试抽象能否呗实例化
 * 作者:谯婷
 * 日期:2019.5.7
 */
public class TestCar {
    public static void main(String[] args) {
        //利用匿名子类来实例化
        Car car = new Car() {
            @Override
            public void start() {
                System.out.println(getBrand()+"启动了。");
            }

            @Override
            public void stop() {
                System.out.println(getBrand()+"停止了。");

            }
        };
        car.setBrand("奥迪");
        car.setManufactuer("德国大众汽车");
        car.setPrice(500000);
        car.setType("自动档");

        car.start();
        car.stop();
    }
}

3、继承Car抽象类,创建子类BMWCar,实现两个抽象方法

package net.wek11接口;

/**
 * 功能:继承Car类,创建AWMCar类
 * 作者:谯婷
 * 日期:2019.5.7
 */
public class AWMCar extends Car{
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void start() {
        if(getType().equals("自动档")){
            System.out.println("宝马车["+name +"]以自动档的方式启动了!");
        }else{
            System.out.println("宝马车["+name +"]以自动档的方式启动了!");
        }
    }

    @Override
    public void stop() {
        if(getType().equals("自动档")){
            System.out.println("宝马车["+name +"]以自动档的方式停止了!");
        }else{
            System.out.println("宝马车["+name +"]以自动档的方式停止了!");
        }
    }
}

使用如下方法可直观的看出BMWCar是Car的子类:
在这里插入图片描述
在这里插入图片描述

Intellij IDEA 快捷键
Ctrl + Shift + 上下光标键:上下移动行

4、编写测试类TestBMWCar

package net.wek11接口;

/**
 * 功能:测试
 * 作者:谯婷
 * 日期:2019.5.7
 */
public class TestAWMCar {
    public static void main(String[] args) {
        AWMCar awmCar = new AWMCar();

        awmCar.setName("大神?");
        awmCar.setBrand("宝马");
        awmCar.setManufactuer("德国大众汽车公司");
        awmCar.setPrice(52000);
        awmCar.setType("手动档");

        awmCar.start();
        awmCar.stop();
    }
}

运行结果如下:
在这里插入图片描述
Java只允许单根继承,
也就是说,一个类最多只能有一个父类。
在Java里,只有一个类Object是没有父类。

二、接口(nterface)
对于抽象类,我们把革命进行到底,如果一个类的全部方法都是抽象的,那么我们给它一个新的名称:接口。接口不能包含普通方法,只能包含抽象方法。接口其实是定义了一种标准或规范,既然如此,接口里不能包含一般的属性,只能包含常量。

问题:如何使用接口呢?我们通过案例来演示。

1、创建Shape接口
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述错误提示,表明接口里不允许有任何普通方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package net.wek11接口;

/**
 * 功能:shape接口
 * 作者:谯婷
 * 日期:2019.5.9
 */
public interface shape {
    double PI = 3.1415926;
    double circumference();
    double area();
}

2、创建一个Circle类,实现Shape接口

package net.wek11接口;

/**
 * 功能:创建Circle类,实现Shape接口
 * 作者:谯婷
 * 日期:2019.5.9
 */
public class Circle implements shape {
    private double r;

    public double getR() {
        return r;
    }

    public void setR(double r) {
        this.r = r;
    }
    @Override
    public double circumference() {
        return 2 * PI * r;
    }

    @Override
    public double area() {
        return PI * r * r;
    }
}

Circle类结构(属性与方法):
在这里插入图片描述
3、创建测试类TestCircle

package net.wek11接口;

import java.util.Scanner;

public class TestCircle {
    public static void main(String[] args) {
        //声明部分
        double r,c,s;
        Scanner sc = new Scanner(System.in);
        Circle circle = new Circle();

        //输入部分
        System.out.println("r = ");
        r = sc.nextDouble();

        //处理部分
        circle.setR(r);
        c= circle.circumference();
        s = circle.area();

        //输出部分
        System.out.println("c = " + String.format("%.2f",c));
        System.out.println("s = " + String.format("%.2f",s));

    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值