Java-黑马Java学习作业-day15面向对象进阶(抽象类&接口&内部类)

学习视频链接:https://www.bilibili.com/video/BV17F411T7Ao

文章目录

    • 第一题:(抽象类求面积和周长)
    • 第二题:(接口实现新旧手机功能)
    • 第三题:(使用子类和匿名内部类调用接口)


第一题:(抽象类求面积和周长)

需求:

分析以下需求用代码实现:

  1. 定义形状类:

    功能:求面积,求周长

  2. 定义圆形类Round:

    属性:半径,圆周率

    功能:求面积,求周长

  3. 定义长方形类Rectangle:

    属性:长和宽

    功能:求面积,求周长

  4. 定义测试类:

    分别创建圆形和长方形对象,为相应的属性赋值

    分别调用求面积和求周长的方法

  • Graph接口
package cn.kox.homework01;

/**
 * @ClassName: Graph
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public abstract class Graph {

    // 面积
    public abstract void area();

    // 周长
    public abstract void perimeter();
}

  • Rectangle类
package cn.kox.homework01;

/**
 * @ClassName: Rectangle
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Rectangle extends Graph{

    private double length;
    private double wide;

    public Rectangle() {
    }

    public Rectangle(double length, double wide) {
        this.length = length;
        this.wide = wide;
    }

    public double getLength() {
        return length;
    }

    public void setLength(double length) {
        this.length = length;
    }

    public double getWide() {
        return wide;
    }

    public void setWide(double wide) {
        this.wide = wide;
    }

    @Override
    public void area() {
        double result = length * wide;
        System.out.println("长方形的面积为:" + result);
    }

    @Override
    public void perimeter() {
        double result = (length + wide) * 2;
        System.out.println("长方形的周长为:" + result);
    }
}
  • Round类
package cn.kox.homework01;

/**
 * @ClassName: Round
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Round extends Graph{
    private double radius;
    private double PI;

    public Round() {
    }

    public Round(double radius, double PI) {
        this.radius = radius;
        this.PI = PI;
    }

    public double getRadius() {
        return radius;
    }

    public void setRadius(double radius) {
        this.radius = radius;
    }

    public double getPI() {
        return PI;
    }

    public void setPI(double PI) {
        this.PI = PI;
    }

    @Override
    public void area() {
        double result = radius * PI;
        System.out.println("圆面积为:" + result);
    }

    @Override
    public void perimeter() {
        double result = 2 * PI * radius;
        System.out.println("圆周长为:" + result);
    }
}
  • Test测试类
package cn.kox.homework01;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        Round r = new Round(2, 3.14);
        r.area();
        r.perimeter();

        Rectangle r1 = new Rectangle(10, 5);
        r1.area();
        r1.perimeter();
    }
}

运行结果:
Java-黑马Java学习作业-day15面向对象进阶(抽象类&接口&内部类)_第1张图片

第二题:(接口实现新旧手机功能)

需求:

  1. 定义手机类

​ 行为:打电话,发短信

  1. 定义接口IPlay

​ 行为:玩游戏

  1. 定义旧手机类继承手机类

​ 行为:继承父类的行为

  1. 定义新手机继承手机类实现IPlay接口

    行为:继承父类的行为,重写玩游戏方法

  2. 定义测试类

​ 在测试类中定义一个 用手机的方法,要求该方法既能接收老手机对象,也能接收新手机对象

​ 在该方法内部调用打电话,发短信以及新手机特有的玩游戏方法

  • formerPhone类
package cn.kox.homework02;

/**
 * @ClassName: formerPhone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class formerPhone extends Phone{

    public void show() {
        System.out.println("老手机");
    }
}
  • IPlay接口
package cn.kox.homework02;

public interface IPlay {
    void playGame();
}
  • newPhone类
package cn.kox.homework02;

/**
 * @ClassName: newPhone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class newPhone extends Phone implements IPlay{

    @Override
    public void playGame() {
        System.out.println("玩游戏");
    }

    public void show() {
        System.out.println("新手机");
    }
}
  • Phone类
package cn.kox.homework02;

/**
 * @ClassName: Phone
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Phone {
    public void send() {
        System.out.println("发短信");
    }

    public void phoning() {
        System.out.println("打电话");
    }
}
  • Test测试类
package cn.kox.homework02;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        formerPhone f = new formerPhone();
        f.show();
        f.phoning();
        f.send();

        System.out.println();

        newPhone n = new newPhone();
        n.show();
        n.phoning();
        n.send();
    }
}

运行结果
Java-黑马Java学习作业-day15面向对象进阶(抽象类&接口&内部类)_第2张图片

第三题:(使用子类和匿名内部类调用接口)

需求:

  1. 接口IPlay中有一个方法playGame(),在测试类中如何调用该方法?

​ 要求1.创建子类实现接口的方式实现
​ 要求2:用匿名内部类实现

  1. 一个抽象类Fun中有一个抽象方法 fun() , 在测试类中如何调用该方法?

​ 要求1.创建子类继承抽象类的方式实现
​ 要求2:用匿名内部类实现

  • Fun接口
package cn.kox.homework03;

public interface Fun {
    public abstract void fun();
}
  • funSon类
package cn.kox.homework03;

/**
 * @ClassName: funSon
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class funSon implements Fun{
    @Override
    public void fun() {
        System.out.println("开个玩笑吧");
    }
}
  • IPlay接口
package cn.kox.homework03;

public interface IPlay {
    void playGame();
}
  • Test测试类
package cn.kox.homework03;

/**
 * @ClassName: Test
 * @Author: Kox
 * @Data: 2023/1/29
 * @Sketch:
 */
public class Test {
    public static void main(String[] args) {
        IPlay i =  new IPlay() {

            @Override
            public void playGame() {
                System.out.println("打游戏");
            }
        };
        i.playGame();

        funSon f = new funSon();
        f.fun();
    }
}

运行结果:
Java-黑马Java学习作业-day15面向对象进阶(抽象类&接口&内部类)_第3张图片

你可能感兴趣的:(Java,SE,java,学习,开发语言)