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();
}
}
结果
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;
}
}
结果
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;
}
}