Day06_javaobject01-2_侯一鸣

本文介绍了Java中不同包下相同类名的加载规则,展示了如何通过导入指定包下的类改变程序运行结果。此外,还讲解了长方形和正方形类的设计,包括面积和周长的计算以及成员变量的get和set方法。最后,通过一个Person类及其子类Student和Teacher的实例,阐述了类的继承和方法的重写,并提出了限制对象数量的单例设计模式实现,确保最多创建10个Student对象。
摘要由CSDN通过智能技术生成

Task01

问题

不修改类中代码,改变程序运行结果

在com.cskaoyan.a包下,定义一个名为MyClass的类如下

public class MyClass {
    public void hello() {
        System.out.println("a包");
    }
}

同时,在com.cskaoyan.b包下,一个类名也为MyClass

public class MyClass {
    public void hello() {
        System.out.println("b包");
    }
}

同时在com.cskaoyan.b包下定义一个Test类如下:

public class Test {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.hello();
    }
}

毫无疑问,当执行Test中的main方法的时候输出的是: b包 先要求,在不改变Test main方法中代码的情况下,让main方法运行之后输出 a包,应该怎么做?

修改Test类如下

package day06.com.cskaoyan.b;
import day06.com.cskaoyan.a.MyClass;
public class Test {
    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.hello();
    }
}

结果

image-20220104192240148

Task02

问题

创建两个类,分别用来表示长方形和正方形,同时定义所需的成员变量,代表长方形或者正方形的边长,在两个类中分别定义两个方法,用来求对应形状的面积和周长,并定义相应的get,set方法,获取 和改变长方形和正方形的边长。

代码

package day06.Task02;

public class Task02 {
    public static void main(String[] args) {
        Square square = new Square();
        Rectangle rectangle = new Rectangle();

        System.out.println("获取的正方形边长为:" + square.getSideLength());
        System.out.println("获取的长方形长、宽分别为:" + rectangle.getLength() + " " + rectangle.getWide());
        square.s();
        square.l();
        rectangle.s();
        rectangle.l();

        square.setSideLength(4);
        rectangle.setLength(3);
        rectangle.setWide(6);
        System.out.println();

        System.out.println("改变后的正方形边长为:" + square.getSideLength());
        System.out.println("改变后的长方形长、宽分别为:" + rectangle.getLength() + " " + rectangle.getWide());
        square.s();
        square.l();
        rectangle.s();
        rectangle.l();

    }

}
class Square{
    private int sideLength = 3;

    public void s (){
        System.out.println("正方形的面积为:" + sideLength * sideLength);
    }

    public void l (){
        System.out.println("正方形的周长为:" + sideLength * 4);
    }

    public int getSideLength() {
        return sideLength;
    }

    public void setSideLength(int sideLength) {
        this.sideLength = sideLength;
    }
}
class Rectangle{
    private int length = 2 ;
    private int wide = 5;

    public void s (){
        System.out.println("长方形的面积为:" + length * wide);
    }

    public void l (){
        System.out.println("长方形的周长为:" + (length + wide) * 2);
    }

    public int getLength() {
        return length;
    }

    public int getWide() {
        return wide;
    }

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

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

结果

image-20220104195704133

Task03

问题

a. 声明一个Person类,里面定义了三个属性,name、gender、age(姓名、性别、年龄) 通 过构造方 法进行赋值。有一个display方法,可以展示对应的姓名性别年龄信息

b. 声明一个Student类,继承自Person类,增加一个独特的属性id(学号)通过构造方法进行 赋值,同 时有一个方法可以展示姓名性别年龄学号信息

c. 声明一个Teacher类,继承自Person类,增加course属性(教学课程)通过构造方法进行赋 值,有一 个方法,可以显示姓名性别年龄教学课程信息

代码

package day06.Task03;

public class Task03 {

}

class Person{
    String name;
    String gender;
    int age;

    public Person(){

    }

    public Person(String name, String gender, int age) {
        this.name = name;
        this.gender = gender;
        this.age = age;
    }

    public void display(){
        System.out.println(name + "---" + gender + "---" + age);
    }

}

class Student extends Person{
    int id;

    public Student(int id) {
        this.id = id;
    }

}

class Teacher extends Person{
    String course;

    public Teacher(String course) {
        this.course = course;
    }
}

Task04

问题

定义一个Student类,并要求其他类在使用Student类的时候,最多只能创建10个Student类的对象,如何实现?

​ 提示:

​ 要实现该功能,就不能让外部类直接使用new Student(…)的方式来创建对象

​ 如何不能让其他类new Student(…),只需将Student类的所 有构造方法的,权限改为 private即可。

​ 接着,把创建对Student对象的工作,交给一个专门的方法去做(想想这个方法应该是怎样 的方法)

代码

package day06.Task04;

public class Task04 {
    public static void main(String[] args) {
        for (int i = 0; i < 15; i++) {
            Student student = Student.establishStudent0();              //无参
//          Student student = Student.establishStudent1("张三");        //一参
//          Student student = Student.establishStudent2("张三",1);      //二参
//          Student student = Student.establishStudent3("张三",1,18);   //三参

            if(student == null){
                System.out.println(i + " :超过十个");
            }else{
                System.out.println(i + " :这是创建的第" + Student.ans + "个Student类");
            }
        }
    }
}

class Student{
    String name;
    int id;
    int age;
    static int ans = 0;

    private Student() {

    }

    private Student(String name) {
        this.name = name;
    }

    private Student(String name, int id) {
        this.name = name;
        this.id = id;
    }

    private Student(String name, int id, int age) {
        this.name = name;
        this.id = id;
        this.age = age;
    }

    //0参变量
    static public Student establishStudent0(){
        if(ans < 10){
            ans++;
            return new Student();
        }
        return null;
    }

    //1参变量
    static public Student establishStudent1(String name){
        if(ans < 10){
            ans++;
            return new Student();
        }
        return null;
    }

    //2参变量
    static public Student establishStudent2(String name, int id){
        if(ans < 10){
            ans++;
            return new Student();
        }
        return null;
    }

    //3参变量
    static public Student establishStudent3(String name, int id, int age){
        if(ans < 10){
            ans++;
            return new Student();
        }
        return null;
    }
}

结果

image-20220104213015409

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值