java基础-练习

第一问

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

  1. 定义形状类:

    功能:求面积,求周长

  2. 定义圆形类Round:

    属性:半径,圆周率

    功能:求面积,求周长

  3. 定义长方形类Rectangle:

     属性:长和宽
    

    功能:求面积,求周长

  4. 定义测试类:

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

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

package com.jdL.day15homework.question1;

public abstract class Shape {
    public Shape() {
    }
    public abstract double getArea();
    public abstract double getPerimeter();
}
package com.jdL.day15homework.question1;

public class Round extends Shape{
    private double radius;

    public Round() {
    }

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

    //圆周率是一个常量
    private static final double pi=3.14;

    @Override
    public double getArea() {
        return pi*radius*radius;
    }

    @Override
    public double getPerimeter() {
        return 2*pi*radius;
    }
}
package com.jdL.day15homework.question1;

public class Rectangle extends Shape{
    private double length;
    private double width;

    public Rectangle() {
    }

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

    @Override
    public double getArea() {
        return length*width;
    }

    @Override
    public double getPerimeter() {
        return 2*(length+width);
    }
}
package com.jdL.day15homework.question1;

public class ShapeMain {
    public static void main(String[] args) {
        //创建圆的对象
        Round r=new Round(3);
        System.out.println("圆的面积为:"+r.getArea());
        System.out.println("圆的周长为:"+r.getPerimeter());
        System.out.println("----------------------");
        Rectangle g=new Rectangle(1,2);
        System.out.println("长方形的面积为:"+g.getArea());
        System.out.println("长方形圆的周长为:"+g.getPerimeter());
    }
}

第二问

  1. 定义手机类

​ 行为:打电话,发短信

  1. 定义接口IPlay

​ 行为:玩游戏

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

​ 行为:继承父类的行为

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

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

  2. 定义测试类

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

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

package com.jdL.day15homework.question2;

public abstract class Phone {

    public abstract void getcall();
    public abstract void sendMessage();
}
package com.jdL.day15homework.question2;

public interface IPlay {
    public abstract void playGame();
}
package com.jdL.day15homework.question2;

public class oldPhone extends Phone{

    @Override
    public void getcall() {
        System.out.println("旧手机打电话");
    }

    @Override
    public void sendMessage() {
        System.out.println("旧手机发短信");
    }
}
package com.jdL.day15homework.question2;

public class newPhone extends Phone implements IPlay{
    @Override
    public void playGame() {
        System.out.println("新手机玩游戏真爽");
    }

    @Override
    public void getcall() {
        System.out.println("新手机打电话");

    }

    @Override
    public void sendMessage() {
        System.out.println("新手机发短信");
    }
}
package com.jdL.day15homework.question2;

public class PhoneMain {
    public static void main(String[] args) {
        Phone p=new oldPhone();
        usePhone(p);
        Phone p1=new newPhone();
        usePhone(p1);

    }
    //使用手机的方法
    public static void usePhone(Phone ph){
        ph.getcall();
        ph.sendMessage();
        if(ph instanceof IPlay) {
            IPlay newPh = (IPlay) ph;
            newPh.playGame();
        }
    }
}

第三问

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

​ 要求1.创建子类实现接口的方式实现

package com.jdL.day15homework.question3;

public interface IPlay {
    public abstract void playGame();
}
package com.jdL.day15homework.question3;

import com.jdL.day15homework.question2.IPlay;

public class iplayTest implements IPlay{
    @Override
    public void playGame() {
        System.out.println("玩游戏");
    }
}
package com.jdL.day15homework.question3;

public class iplayMain {
    public static void main(String[] args) {
        iplayTest  i = new iplayTest();
        i.playGame();
    }
}

要求2:用匿名内部类实现

package com.jdL.day15homework.question3;

public interface IPlay {
    public abstract void playGame();
}
package com.jdL.day15homework.question3;

import com.jdL.day15homework.question2.IPlay;

public class iplayTest {

    public static void main(String[] args) {
        new IPlay(){
            @Override
            public void playGame() {
                System.out.println("玩游戏");
            }
        }.playGame();
    }
}
  1. 一个抽象类Fun中有一个抽象方法 fun() , 在测试类中如何调用该方法?

​ 要求1.创建子类继承抽象类的方式实现

package com.jdL.day15homework.question3;

public abstract class Fun {
    public abstract void fun();
}
package com.jdL.day15homework.question3;

public class FunTest extends Fun {

    @Override
    public void fun() {
        System.out.println("玩耍");
    }
}
package com.jdL.day15homework.question3;

public class FunMain {
    public static void main(String[] args) {
        FunTest  funTest = new FunTest();
        funTest.fun();
    }
}

要求2:用匿名内部类实现

package com.jdL.day15homework.question3;

public abstract class Fun {
    public abstract void fun();
}
package com.jdL.day15homework.question3;

public class FunMain {
    public static void main(String[] args) {
        new Fun(){
            @Override
            public void fun(){
                System.out.println("玩耍");
            }
        }.fun();
    }
}

第四问

 在控制台输出”HelloWorld”

​ 自己书写,不要用idea自动生成

interface Inter {
    void show(); 
}
class Outer { 
    //补齐代码 
}
public class OuterDemo {
    public static void main(String[] args) {
        Outer.method().show();
    }
}
package com.jdL.day15homework.question4;

public interface Inter {
    void show();
}

class Outer {
    public static Inter method() {
        return new Inter() {
            @Override
            public void show() {
                System.out.println("hello world");
            }
        };
    }
}

第五问

在测试类Test中创建A的对象a并调用成员方法methodA(),要求用两种方式实现

public class Test {
    public static void main(String[] args) {	
        
    }
}

//定义接口
interface InterA {
    void showA();	
}

class A {
    public void methodA(InterA a) {
        a.showA();		
    }	
}
接口多态
package com.jdL.day15homework.question5;
public class Test {
    public static void main(String[] args) {
        InterA a=new InterA(){
            public void showA(){
                System.out.println("哇哇哇");
            }
        };
        A a1=new A();
        a1.methodA(a);

    }
}

第二种

package com.jdL.day15homework.question5;

public class InterA1 implements InterA{
    @Override
    public void showA() {
        System.out.println("哇哇哇");

    }
}
package com.jdL.day15homework.question5;

public class Test {
    public static void main(String[] args) {
        InterA a1 = new InterA1();
        A a = new A();
        a.methodA(a1);
    }
}

第六问

​ 在测试类Test中创建B的对象b,并调用成员方法methodB

public class Test {
    public static void main(String[] args) {

    }
}

//定义一个接口
interface InterB {
    void showB();	
}

//目标:调用成员方法methodB
class B {
    InterB b;
    public B(InterB b){
        this.b = b;
    }
    public void methodB(){
        b.showB();		
    }
}
package com.jdL.day15homework.question6;

public class InterMain {
    public static void main(String[] args) {
        //
        InterB inter=new InterB(){
            @Override
            public void showB(){
                System.out.println("showB的方法被调用");
            }
        };

        B b=new B(inter);
        b.methodB();
    }
}

我发现匿名内部类的核心,其实就是把匿名的那一段要看成是接口或者类的子类的一个对象,在子类里面重写了父类的方法。第六问的核心,其实class B里面是一个成员变量,加一个构造函数,知识这个成员变量的类型是InterB的



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值