面向对象进阶基础练习

Java学习笔记(新手纯小白向)

第一章 JAVA基础概念

第二章 JAVA安装和环境配置

第三章 IntelliJ IDEA安装

第四章 运算符

第五章 运算符联系

第六章 判断与循环

第七章 判断与循环练习

第八章 循环高级综合

第九章 数组介绍及其内存图

第十章 数组基础练习

第十一章 方法基础及简单应用

第十二章 方法基础练习

第十三章 前续知识综合练习

第十四章 面向对象基础

第十五章 面向对象综合训练

第十六章 字符串基础

第十七章 字符串基础练习

第十八章 ArrayList集合

第十九章 ArrayList集合基础练习

第二十章 面向对象进阶

第二十一章 面向对象进阶基础练习


目录

Java学习笔记(新手纯小白向)

前言

一、员工

        1.需求

        2.参考答案

 二、角色

        1.需求

        2.分析

        3.参考答案

 三、手机

        1.需求

        2.思考

        3.提示

        4.参考答案

 四、人

        1.需求

        2.参考答案

五、员工

        1.需求

        2.参考答案

 六、人与动物

        1.需求

        2.参考答案

七、面积与周长

        1.需求

        2.参考答案

 八、新旧手机

        1.需求

        2.参考答案

九、匿名内部类调用方法

        1.需求

        2.参考答案

 十、输出”HelloWorld”

        1.需求

        2.参考答案 

十一、创建对象并调用成员方法1

        1.需求

        2.参考答案

 十二、创建对象并调用成员方法2

        1.需求

        2.参考答案

总结


前言

本篇章主要展示了常见的一些基础的面向对象进阶知识练习及解答


一、员工

        1.需求

                在黑马程序员中有很多员工(Employee)。

                按照工作内容不同分教研部员工(Teacher)和行政部员工(AdminStaff)

                教研部根据教学的方式不同又分为讲师(Lecturer)和助教(Tutor)

                行政部根据负责事项不同,又分为维护专员(Maintainer),采购专员(Buyer)

                公司的每一个员工都编号,姓名和其负责的工作

                每个员工都有工作的功能,但是具体的工作内容又不一样。

        2.参考答案

public class Employee {//定义员工的属性private String id;private String name;//定义空参构造和带参构造public Employee() {}public Employee(String id, String name) {this.id = id;this.name = name;}//定义成员变量的get和set方法public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}//定义方法work,代表行为:工作public void work() {System.out.println("员工在工作");}
}
public class AdminStaff extends Employee {//定义空参构造和带参构造public AdminStaff() {}public AdminStaff(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("行政部员工在进行行政工作");}
}
public class MainTrainer extends AdminStaff {//定义空参构造和带参构造public MainTrainer() {}public MainTrainer(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("维护专员在进行维护");}
}
public class Buyer extends AdminStaff {//定义空参构造和带参构造public Buyer() {}public Buyer(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("采购专员在采购");}
}
public class Teacher extends Employee {//定义空参构造和带参构造public Teacher() {}public Teacher(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("教研部员工在进行教学任务");}
}
public class Lecturer extends Teacher {//定义空参构造和带参构造public Lecturer() {}public Lecturer(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("讲师在讲课");}
}
public class Tutor extends Teacher {//定义空参构造和带参构造public Tutor() {}public Tutor(String id, String name) {super(id, name);}//重写方法work@Overridepublic void work() {System.out.println("助教在批改作业");}
}
public class EmployeeTest {//在黑马程序员中有很多员工(Employee)。//按照工作内容不同分教研部员工(Teacher)和行政部员工(AdminStaff)//教研部根据教学的方式不同又分为讲师(Lecturer)和助教(Tutor)//行政部根据负责事项不同,又分为维护专员(Maintainer),采购专员(Buyer)//公司的每一个员工都编号,姓名和其负责的工作//每个员工都有工作的功能,但是具体的工作内容又不一样。public static void main(String[] args) {//创建对象Lecturer l = new Lecturer("001", "zhangsan");Tutor t = new Tutor("002", "lisi");MainTrainer m = new MainTrainer("003", "wangwu");Buyer b = new Buyer("004", "zhaoliu");//调用方法System.out.println(l.getId() + "," + l.getName());l.work();System.out.println(t.getId() + "," + t.getName());t.work();System.out.println(m.getId() + "," + m.getName());m.work();System.out.println(b.getId() + "," + b.getName());b.work();}
}

 二、角色

        1.需求

                在传智教育的tlias教学资源管理系统中,存在学生、老师角色会进入系统。

        2.分析

                学生信息和行为(名称,年龄,所在班级,查看课表,填写听课反馈fillForm)

                老师信息和行为(名称,年龄,部门名称,查看课表,发布问题publishForm)

                定义角色类作为父类包含属性(名称,年龄),行为(查看课表)

                定义子类:学生类包含属性(所在班级),行为(填写听课反馈)

                定义子类:老师类包含属性(部门名称),行为(发布问题)

        3.参考答案

public class Role {//定义角色的属性private String name;private int age;//定义空参构造和带参构造public Role() {}public Role(String name, int age) {this.name = name;this.age = age;}//定义成员变量的get和set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义方法viewSchedule,代表行为:查看课表public void viewSchedule() {System.out.println("查看课表");}
}
public class Teacher extends Role {//定义老师的属性private String department;//定义空参构造和带参构造public Teacher() {}public Teacher(String name, int age, String department) {super(name, age);this.department = department;}//定义成员变量的get和set方法public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}//定义方法publishForm,代表行为:发布问题public void publishForm() {System.out.println("发布问题");}
}
public class Student extends Role {//定义学生的属性private String atClass;//定义空参构造和带参构造public Student() {}public Student(String name, int age, String atClass) {super(name, age);this.atClass = atClass;}//定义成员变量的get和set方法public String getAtClass() {return atClass;}public void setAtClass(String atClass) {this.atClass = atClass;}//定义方法fillForm,代表行为:填写听课反馈public void fillForm() {System.out.println("填写听课反馈");}
}
public class RoleTest {//在传智教育的tlias教学资源管理系统中,存在学生、老师角色会进入系统。public static void main(String[] args) {//创建老师和学生对象Student student1 = new Student("zhangsan", 23, "2203");Teacher teacher1 = new Teacher("lisi", 34, "Java");//打印信息,并调用方法System.out.println(student1.getName() + "," + student1.getAge() + "," + student1.getAtClass());student1.viewSchedule();student1.fillForm();System.out.println("————————————————");System.out.println(teacher1.getName() + "," + teacher1.getAge() + "," + teacher1.getDepartment());teacher1.viewSchedule();teacher1.publishForm();}
}

 三、手机

        1.需求

                完成代码(按照标准格式写),然后在测试类中测试。

                (1)手机类Phone

                        属性:品牌brand,价格price

                        无参构造,有参构造

                        行为:打电话call,发短信sendMessage,玩游戏playGame

                (2)测试类

                        创建Phone类对象,调用Phone类中的方法

        2.思考

                假设所有的手机都有属性屏幕的尺寸(int size),而且假设所有手机的屏幕尺寸为6,应该如何实现?

        3.提示

                ​ 可以把size定义为静态

        4.参考答案

public class Phone {//定义手机的属性private String brand;private double price;private static int size;//定义空参构造和带参构造public Phone() {}public Phone(String brand, double price) {this.brand = brand;this.price = price;}//定义成员变量的get和set方法public String getBrand() {return brand;}public void setBrand(String brand) {this.brand = brand;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public static int getSize() {return size;}public static void setSize(int size) {Phone.size = size;}//定义方法call,代表行为:打电话public void call() {System.out.println("打电话");}//定义方法sendMessage,代表行为:发短信public void sendMessage() {System.out.println("发短信");}//定义方法playGame,代表行为:玩游戏public void playGame() {System.out.println("玩游戏");}
}
public class PhoneTest {//完成代码(按照标准格式写),然后在测试类中测试。//1.手机类Phone//属性:品牌brand,价格price//无参构造,有参构造//行为:打电话call,发短信sendMessage,玩游戏playGame//2.测试类//创建Phone类对象,调用Phone类中的方法//假设所有的手机都有属性屏幕的尺寸(int size),而且假设所有手机的屏幕尺寸为6,应该如何实现?public static void main(String[] args) {//对手机屏幕尺寸进行赋值Phone.setSize(6);//创建手机对象Phone phone1 = new Phone("xiaomi", 1999.99);//打印信息,并调用方法System.out.println(phone1.getBrand() + "," + phone1.getPrice() + "," + Phone.getSize());phone1.call();phone1.sendMessage();phone1.playGame();}
}

 四、人

        1.需求

                (1)定义Person类

                        属性:

                                姓名name、性别gender、年龄age、国籍nationality;

                        方法:

                                吃饭eat、睡觉sleep,工作work。

                (2)根据人类,创建一个学生类Student

                        增加属性:

                                学校school、学号stuNumber;

                        重写工作方法(学生的工作是学习)。

                (3)根据人类,创建一个工人类Worker

                        增加属性:

                                单位unit、工龄workAge;

                        重写工作方法(工人的工作是盖房子)。

                (4)根据学生类,创建一个学生干部类 StudentLeader

                        增加属性:

                                职务job;

                        增加方法:开会meeting。

                (5)编写测试类分别对上述3类具体人物进行测试。

                (6)要求运行结果:

学生需要学习!
工人的工作是盖房子!
学生干部喜欢开会!

        2.参考答案

public class Person {//定义人的属性private String name;private String gender;private int age;private String nationality;//定义空参构造和带参构造public Person() {}public Person(String name, String gender, int age, String nationality) {this.name = name;this.gender = gender;this.age = age;this.nationality = nationality;}//定义成员变量的get和set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getGender() {return gender;}public void setGender(String gender) {this.gender = gender;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getNationality() {return nationality;}public void setNationality(String nationality) {this.nationality = nationality;}//定义方法eat,代表行为:吃饭public void eat() {System.out.println("人类要工作");}//定义方法sleep,代表行为:睡觉public void sleep() {System.out.println("人类要睡觉");}//定义方法work,代表行为:工作public void work() {System.out.println("人类要工作");}
}
public class Worker extends Person {//定义工人的属性private String unit;private double workAge;//定义空参构造和带参构造public Worker() {}public Worker(String name, String gender, int age, String nationality, String unit, double workAge) {super(name, gender, age, nationality);this.unit = unit;this.workAge = workAge;}//定义成员变量的get和set方法public String getUnit() {return unit;}public void setUnit(String unit) {this.unit = unit;}public double getWorkAge() {return workAge;}public void setWorkAge(double workAge) {this.workAge = workAge;}//重写方法work@Overridepublic void work() {System.out.println("工人的工作是盖房子!");}
}
public class Student extends Person {//定义学生的属性private String school;private String stuNumber;//定义空参构造和带参构造public Student() {}public Student(String name, String gender, int age, String nationality, String school, String stuNumber) {super(name, gender, age, nationality);this.school = school;this.stuNumber = stuNumber;}//定义所有成员变量的get和set方法public String getSchool() {return school;}public void setSchool(String school) {this.school = school;}public String getStuNumber() {return stuNumber;}public void setStuNumber(String stuNumber) {this.stuNumber = stuNumber;}//重写方法work@Overridepublic void work() {System.out.println("学生需要学习!");}
}
public class StudentLeader extends Student {//定义学生干部的属性private String job;//定义空参构造和带参构造public StudentLeader() {}public StudentLeader(String name, String gender, int age, String nationality, String school, String stuNumber, String job) {super(name, gender, age, nationality, school, stuNumber);this.job = job;}//定义成员变量的get和set方法public String getJob() {return job;}public void setJob(String job) {this.job = job;}//定义方法meeting,代表行为:开会public void meeting() {System.out.println("学生干部喜欢开会!");}
}
public class PersonTest {//分析以下需求,并用代码实现//1.定义Person类//属性://姓名name、性别gender、年龄age、国籍nationality;//方法://吃饭eat、睡觉sleep,工作work。//2.根据人类,创建一个学生类Student//增加属性://学校school、学号stuNumber;//重写工作方法(学生的工作是学习)。//3.根据人类,创建一个工人类Worker//增加属性://单位unit、工龄workAge;//重写工作方法(工人的工作是盖房子)。//4.根据学生类,创建一个学生干部类 StudentLeader//增加属性://职务job;//增加方法:开会meeting。//5.编写测试类分别对上述3类具体人物进行测试。//6.要求运行结果://学生需要学习!//工人的工作是盖房子!//学生干部喜欢开会!public static void main(String[] args) {//创建对象Student student = new Student("zhangsan", "man", 23, "China", "岳麓书院", "c001");Worker worker = new Worker("lisi", "woman", 46, "China", "中建七局", 12.3);StudentLeader studentLeader = new StudentLeader("wangwu", "man", 24, "US", "MIT", "u001", "leader");//调用方法,打印结果student.work();worker.work();studentLeader.meeting();}
}

五、员工

        1.需求

                (1)定义项目经理类 属性: 姓名 工号 工资 奖金 行为: 工作work

                (2)定义程序员类 属性: 姓名 工号 工资 行为: 工作work

                (3)向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法

                (4)编写测试类:完成这两个类的测试

        2.参考答案

public class Employee {//定义员工的属性private String name;private String id;private double salary;//定义空参构造和带参构造public Employee() {}public Employee(String name, String id, double salary) {this.name = name;this.id = id;this.salary = salary;}//定义成员变量的get和set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public String getId() {return id;}public void setId(String id) {this.id = id;}public double getSalary() {return salary;}public void setSalary(double salary) {this.salary = salary;}//定义方法work,代表行为:工作public void work() {System.out.println("员工在工作");}
}
public class Manager extends Employee {//定义项目经理的属性private double bonus;//定义空参构造和带参构造public Manager() {}public Manager(String name, String id, double salary, double bonus) {super(name, id, salary);this.bonus = bonus;}//定义成员变量的get和set方法public double getBonus() {return bonus;}public void setBonus(double bonus) {this.bonus = bonus;}//重写方法workpublic void work() {System.out.println("项目经理正在增加需求");}
}
public class Programmer extends Employee {//定义空参构造和带参构造public Programmer() {}public Programmer(String name, String id, double salary) {super(name, id, salary);}//重写方法workpublic void work() {System.out.println("程序员正在更改需求");}
}
public class EmployeeTest {//1.定义项目经理类 属性: 姓名 工号 工资 奖金 行为: 工作work//2.定义程序员类 属性: 姓名 工号 工资 行为: 工作work//3.向上抽取一个父类,让这两个类都继承这个父类,共有的属性写在父类中,子类重写父类中的方法//4.编写测试类:完成这两个类的测试public static void main(String[] args) {//创建对象Manager manager = new Manager("zhangsan", "001", 19999.9, 39999.9);Programmer programmer = new Programmer("lisi", "002", 29999.9);//打印信息,并调用方法System.out.println(manager.getName() + "," + manager.getId() + "," + manager.getSalary() + "," + manager.getBonus());manager.work();System.out.println("——————————————");System.out.println(programmer.getName() + "," + programmer.getId() + "," + programmer.getSalary());programmer.work();}
}

 六、人与动物

        1.需求

                (1)定义动物类

                        属性: 年龄,颜色

                        行为: eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)

                        生成空参有参构造,set和get方法

                (2)定义狗类继承动物类

                        行为: eat(String something)方法,看家lookHome方法(无参数)

                (3)定义猫类继承动物类

                        行为:eat(String something)方法,逮老鼠catchMouse方法(无参数)

                (4)定义Person类

                        属性: 姓名,年龄

                        行为1: keepPet(Dog dog,String something)方法

                        功能1:喂养宠物狗,something表示喂养的东西

                        该方法调用后打印结果为:颜色为黑色的2岁的狗,在吃骨头

                        行为2: keepPet(Cat cat,String something)方法

                        功能2:喂养宠物猫,something表示喂养的东西

                        该方法调用后打印结果为:颜色为白色的2岁的猫,在吃小鱼干

                (5)生成空参有参构造,set和get方法

                (6)测试以上方法

        2.参考答案

public class Animal {//定义动物的属性private int age;private String color;//定义空参构造和带参构造public Animal() {}public Animal(int age, String color) {this.age = age;this.color = color;}//定义成员变量的get和set方法public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}//定义方法eat,代表行为:吃public String eat(String sth) {return "在吃" + sth;}
}
public class Cat extends Animal {//定义空参构造和带参构造public Cat() {}public Cat(int age, String color) {super(age, color);}//重写方法eat@Overridepublic String eat(String sth) {return "喵喵喵地舔着吃" + sth;}//定义方法catchMouse,代表行为:逮老鼠public void catchMouse() {System.out.println("猫在逮老鼠");}
}
public class Dog extends Animal {//定义空参构造和带参构造public Dog() {}public Dog(int age, String color) {super(age, color);}//重写方法eat@Overridepublic String eat(String sth) {return "汪汪汪地咬着吃" + sth;}//定义方法lookHome,代表行为:看家public void lookHome() {System.out.println("狗在看家");}
}
public class Person {//定义人的属性private String name;private int age;//定义空参构造和带参构造public Person() {}public Person(String name, int age) {this.name = name;this.age = age;}//定义成员变量的get和set方法public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//定义方法keepPet,代表行为:喂养宠物狗public void keepPet(Dog dog, String sth) {System.out.println("颜色为" + dog.getColor() + "的" + dog.getAge() + "岁的狗," + dog.eat(sth));}//定义方法keepPet,代表行为:喂养宠物猫public void keepPet(Cat cat, String sth) {System.out.println("颜色为" + cat.getColor() + "的" + cat.getAge() + "岁的猫," + cat.eat(sth));}
}
public class AnimalTest {//根据需求完成代码://1.定义动物类//属性: 年龄,颜色 行为: eat(String something)方法(无具体行为,不同动物吃的方式和东西不一样,something表示吃的东西)//生成空参有参构造,set和get方法//2.定义狗类继承动物类//行为: eat(String something)方法,看家lookHome方法(无参数)//3.定义猫类继承动物类//行为://eat(String something)方法,逮老鼠catchMouse方法(无参数)//4.定义Person类//属性: 姓名,年龄//行为: keepPet(Dog dog,String something)方法//功能:喂养宠物狗,something表示喂养的东西//该方法调用后打印结果为:颜色为黑色的2岁的狗,在吃骨头//行为: keepPet(Cat cat,String something)方法 功能:喂养宠物猫,something表示喂养的东西//该方法调用后打印结果为:颜色为白色的2岁的猫,在吃小鱼干//5.生成空参有参构造,set和get方法//6.测试以上方法public static void main(String[] args) {//创建对象Dog dog = new Dog(2, "黑色");Cat cat = new Cat(3, "白色");Person person = new Person("zhangsan", 23);//打印信息,并调用方法System.out.println(person.getName() + "," + person.getAge());System.out.println(dog.getAge() + "," + dog.getColor());person.keepPet(dog, "骨头");System.out.println(cat.getAge() + "," + cat.getColor());person.keepPet(cat, "小鱼干");}
}

七、面积与周长

        1.需求

                (1)定义形状类:

                        功能:求面积,求周长

                (2)定义圆形类Round:

                        属性:半径,圆周率

                        功能:求面积,求周长

                (3)定义长方形类Rectangle:

 属性:长和宽

                        功能:求面积,求周长

                (4)定义测试类:

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

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

        2.参考答案

public abstract class Shape {//定义空参构造public Shape() {}//定义抽象方法getArea,表示行为求面积public abstract double getArea();//定义抽象方法getPerimeter,表示行为求周长public abstract double getPerimeter();
}
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;}//定义所有成员变量的get和set方法public double getLength() {return length;}public void setLength(double length) {this.length = length;}public double getWidth() {return width;}public void setWidth(double width) {this.width = width;}@Overridepublic double getArea() {return length * width;}@Overridepublic double getPerimeter() {return 2 * (length + width);}
}
public class Round extends Shape {//定义圆形的属性private double radius;private final double pi = 3.14;//定义空参构造和带参构造public Round() {}public Round(double radius) {this.radius = radius;}//定义成员变量的get和set方法public double getRadius() {return radius;}public void setRadius(double radius) {this.radius = radius;}public double getPi() {return pi;}@Overridepublic double getArea() {return pi * (radius * radius);}@Overridepublic double getPerimeter() {return 2 * pi * radius;}
}
//需求
/*定义形状类:功能:求面积,求周长定义圆形类Round:属性:半径,圆周率功能:求面积,求周长定义长方形类Rectangle:属性:长和宽
功能:求面积,求周长定义测试类:分别创建圆形和长方形对象,为相应的属性赋值
分别调用求面积和求周长的方法*/
public class Test {public static void main(String[] args) {//创建圆形对象Round r1 = new Round(2);//调用方法,求面积与周长System.out.println("圆形的面积为:" + r1.getArea());System.out.println("圆形的周长为:" + r1.getPerimeter());//创建长方形对象Rectangle r2 = new Rectangle(4, 2);//调用方法,求面积与周长System.out.println("长方形的面积为:" + r2.getArea());System.out.println("长方形的周长为:" + r2.getPerimeter());}
}

 八、新旧手机

        1.需求

                (1)定义手机类

                        行为:打电话,发短信

                (2)定义接口IPlay

                        行为:玩游戏

                (3)定义旧手机类继承手机类

                        行为:继承父类的行为

                (4)定义新手机继承手机类实现IPlay接口

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

                (5)定义测试类

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

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

        2.参考答案

public class Phone {//定义空参构造public Phone() {}//定义方法call,代表行为:打电话public void call() {System.out.println("用手机打电话");}//定义方法message,代表行为:发短信public void message() {System.out.println("用手机发短信");}
}
public class OldPhone extends Phone {
}
public class NewPhone extends Phone implements IPlay {@Overridepublic void playGame() {System.out.println("用新手机玩游戏");}
}
public interface IPlay {//定义抽象方法playGame,代表行为:玩游戏public abstract void playGame();
}
//需求
/*定义手机类行为:打电话,发短信定义接口IPlay行为:玩游戏定义旧手机类继承手机类行为:继承父类的行为定义新手机继承手机类实现IPlay接口行为:继承父类的行为,重写玩游戏方法定义测试类在测试类中定义一个用手机的方法,要求该方法既能接收老手机对象,也能接收新手机对象在该方法内部调用打电话,发短信以及新手机特有的玩游戏方法*/
public class Test {public static void main(String[] args) {//使用多态,创建新手机对象和老手机对象Phone p1 = new OldPhone();Phone p2 = new NewPhone();usePhone(p1);usePhone(p2);}//定义方法usePhone,代表行为:用手机public static void usePhone(Phone p) {p.call();p.message();if (p instanceof NewPhone) {((NewPhone) p).playGame();}}
}

九、匿名内部类调用方法

        1.需求

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

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

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

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

        2.参考答案

public interface IPlay {public abstract void playGame();
}
public abstract class Fun {public abstract void fun();
}
public class Zi extends Fun implements IPlay {@Overridepublic void playGame() {System.out.println("玩游戏");}@Overridepublic void fun() {System.out.println("子类继承抽象类的方式实现fun方法");}
}
//需求
/*接口IPlay中有一个方法playGame(),在测试类中如何调用该方法?
要求1.创建子类实现接口的方式实现 要求2:用匿名内部类实现一个抽象类Fun中有一个抽象方法 fun() , 在测试类中如何调用该方法?
要求1.创建子类继承抽象类的方式实现 要求2:用匿名内部类实现*/
public class Test {public static void main(String[] args) {//使用创建子类实现接口的方式,在测试类中调用方法playGame()Zi z1 = new Zi();z1.playGame();//用匿名内部类实现new IPlay() {@Overridepublic void playGame() {System.out.println("用匿名内部类实现playGame方法");}}.playGame();//使用创建子类继承抽象类的方式,在测试类中调用方法fun()Zi z2 = new Zi();z2.fun();//用匿名内部类实现new Fun() {@Overridepublic void fun() {System.out.println("用匿名内部类实现fun方法");}}.fun();}
}

 十、输出”HelloWorld”

        1.需求

                在控制台输出”HelloWorld”

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

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

        2.参考答案 

//需求
//在控制台输出”HelloWorld”
interface Inter {void show();
}class Outer {//补齐代码public static Inter method() {return new Inter() {@Overridepublic void show() {System.out.println("HelloWorld");}};}
}public class OuterDemo {public static void main(String[] args) {Outer.method().show();}
}

十一、创建对象并调用成员方法1

        1.需求

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

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

public class Test {public static void main(String[] args) {	}
}//定义接口
interface InterA {void showA();	
}class A {public void methodA(InterA a) {a.showA();		}	
}

        2.参考答案

//需求
//在测试类Test中创建A的对象a并调用成员方法methodA(),要求用两种方式实现
public class Test {public static void main(String[] args) {//创建A的对象a并调用成员方法methodA()A a = new A();InterA a1 = new InterA() {@Overridepublic void showA() {System.out.println("第一种方式,重写showA方法");}};//第一种方式传入对象a1,第二种方式传入对象aa.methodA(a1);}
}//定义接口
interface InterA {void showA();
}class A implements InterA {public void methodA(InterA a) {a.showA();}@Overridepublic void showA() {System.out.println("第二种方式,重写showA方法");}
}

 十二、创建对象并调用成员方法2

        1.需求

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

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

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

        2.参考答案

//需求
//在测试类Test中创建B的对象b,并调用成员方法methodB
public class Test {public static void main(String[] args) {B b = new B(new InterB() {@Overridepublic void showB() {System.out.println("传入形参为InterB类型");}});b.methodB();}
}//定义一个接口
interface InterB {void showB();
}//目标:调用成员方法methodB
class B {InterB b;public B(InterB b) {this.b = b;}public void methodB() {b.showB();}
}

总结

在了解了面向对象进阶的基础知识后,一定要自己独立动手练习代码,为以后的进阶打好基础。学习好面向对象的编程思想,会极大提高代码的复用性和可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/45507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI网络爬虫019:搜狗图片的时间戳反爬虫应对策略

文章目录 一、介绍二、输入内容三、输出内容一、介绍 如何批量爬取下载搜狗图片搜索结果页面的图片?以孙允珠这个关键词的搜索结果为例: https://pic.sogou.com/pics? 翻页规律如下: https://pic.sogou.com/napi/pc/searchList?mode=2&start=384&xml_len=48&am…

C语言作业7 指针实现strlen,strcpy,strcmp和strstr功能

1、自定义函数(my_strlen)实现strlen函数的功能 2、自定义函数(my_strcpy)实现strcpy函数的功能 3、自定义函数(my_strcmp)实现strcmp函数的功能 4、自定义函数(my_strcat)实现strcat函数的功能 5、自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串 #include &l…

【C++】入门基础(一)

目录 一.命名空间:namespace 1.namespace的价值 2.namespace的定义 3.namespace的使用方法 3.1 域解析运算符:: 3.2 using展开 3.3 using域解析运算符 二.输入输出 三.缺省参数 四.函数重载 1.参数类型不同 2.参数个数不同 3.参数顺序不同 一.命名空间&…

开源项目的认识理解

目录 开源项目有哪些机遇与挑战? 1.开源项目的发展趋势 2.开源的经验分享(向大佬请教与上网查询) 3.开源项目的挑战 开源项目有哪些机遇与挑战? 1.开源项目的发展趋势 1. 持续增长与普及 - 开源项目将继续增长&#xff0c…

从小主机到第一台自组装NAS:升级与优化记录

目录 前言硬件系统安装的波折过程问题解决系统安装 套件/dockerjellyfin 功耗测试刚安装好系统插上缓存盘且运行了更多的套件和 docker 容器之后 温度场景一场景二场景三 后记参考 在使用了一年的小主机 NAS 后,我决定自己组装并安装新 NAS。本文详细记录了硬件选择…

烟雾自动监测报警摄像机

当今社会,安全意识日益增强,各种智能监测技术也在不断创新发展。烟雾自动监测报警摄像机作为其中的一种重要应用,正在为人们的生活和财产安全提供更加全面的保护。烟雾自动监测报警摄像机集成了先进的传感器技术和智能算法,能够高…

【FPGA】FPGA上的看门狗定时器(WDT):科普与应用

什么是看门狗定时器? 看门狗定时器(Watchdog Timer, WDT)是一种在电子系统中用于防止系统卡死或故障的安全机制。它通过在预定时间后重置系统或触发一个中断来保证系统的稳定运行。如果系统由于某些原因无法正常工作,看门狗定时器…

C++ --> 类和对象(二)

前言 在前面简单的介绍了OOP,什么是类,在类中的this指针。接下来就深入理解类和对象。 默认成员函数 默认构造函数:用于在创建对象时初始化对象的成员变量。默认拷贝构造函数:用于使用已存在的对象来初始化新创建的对象。默认析构…

图像搜索技术在司法证据分析中的应用:思通数科大模型的创新实践

引言 在司法侦查过程中,图像和视频证据的分析对于案件的侦破至关重要。随着人工智能技术的快速发展,图像搜索技术已成为司法领域的关键工具。本文将探讨如何结合思通数科的大模型,利用图像搜索技术对案件中的图片或视频证据进行深度分析&…

【前端】css控制背景图片缩放

在CSS中,控制背景图片的缩放主要依赖于background-size属性。这个属性允许你指定背景图片的尺寸,包括是否保持其原有的宽高比。background-size可以接受不同的值来控制图片的缩放方式。 常用的background-size值 auto:默认值。背景图像保持其…

同时用到,网页,java程序,数据库的web小应用

具体实现功能:通过网页传输添加用户的请求,需要通过JDBC来向 MySql 添加一个用户数据 第一步,部署所有需要用到的工具 IDEA(2021.1),Tomcat(9),谷歌浏览器,MySql,jdk(17) 第二步,创建java项目,提前部署数…

ADC 性能规格-静态性能- (2) - 偏移误差( offset error)和满标度增益误差(full scale gain error)

偏移误差(Offset error) 失调(Offset) 定义:失调是指ADC输出数字代码中零位与实际模拟输入零位之间的差异。简单来说,就是当输入信号为零时,ADC输出的数字代码并不一定是零,这个偏差就是失调。影响:失调会影响ADC的整体精度,因为它在整个输入范围内引入了一个固定的偏…

智慧水利引领行业转型:探讨智慧水利解决方案在水务管理、灾害预警及水资源保护中的前沿应用与挑战

本文关键词:智慧水利、智慧水利工程、智慧水利发展前景、智慧水利技术、智慧水利信息化系统、智慧水利解决方案、数字水利和智慧水利、数字水利工程、数字水利建设、数字水利概念、人水和协、智慧水库、智慧水库管理平台、智慧水库建设方案、智慧水库解决方案、智慧…

ExcelToDB2:批量导入Excel到IBM DB2数据库的自动化工具

ExcelToDB2:批量导入Excel到IBM DB2数据库的自动化工具 简介 ExcelToDB2是一个可以批量导入Excel到IBM DB2数据库的自动化工具。支持将xls/xlsx/xlsm/xlsb/csv/txt/xml格式的Excel文件导入到IBM DB2等多种原生及国产数据库。自动化是其最大的特点,因为它…

MVPT: Multitask Vision-Language Prompt Tuning

摘要 提示调整(Prompt Tuning)是一种针对特定任务的学习提示向量的调节,已成为一种数据高效和参数高效的方法,用于使大型预训练的视觉语言模型适应多个下游任务。然而,现有的方法通常是从头开始独立地学习每个任务的提示向量,从而…

docker-compose安装PolarDB-PG数据库

文章目录 一. Mac1.1 docker-compose.yaml1.2 部署1.3 卸载4. 连接 二. Win102.1 docker-compose.yaml2.2 部署2.3 卸载 参考官方文档 基于单机文件系统部署 一. Mac 1.1 docker-compose.yaml mkdir -p /Users/wanfei/docker-compose/polardb-pg && cd /Users/wanfei…

开放式耳机哪款性价比高?这五款超值精品不容错过

喜欢进行户外运动的小伙伴们,应该都很需要一款既可以匹配运动场景,又兼顾音质体验的无线蓝牙耳机吧。而开放式耳机拥有佩戴舒适牢固,不堵塞耳部,不影响外部声音传入耳部的优点,完全可以成为运动健身人士户外运动的好伴…

SimpleTrack环境配置教程

SimpleTrack环境配置教程 conda create --name SimpleTrack python3.6 conda activate SimpleTrack git clone https://github.com/tusen-ai/SimpleTrack.git cd ./SimpleTrack/ # pip install opencv-python4.5.4.58 # 安装opencv-python报错,可尝试安此版本 pip …

【JavaScript 算法】深度优先搜索:探索所有可能的路径

🔥 个人主页:空白诗 文章目录 一、算法原理二、算法实现三、应用场景四、优化与扩展五、总结 深度优先搜索(Depth-First Search, DFS)是一种用于遍历或搜索图或树数据结构的算法。该算法尽可能深入图的分支,探索所有可…

Qt图片缩放显示

在Qt中,如果你想显示图片的像素或者对图片进行缩放显示,可以使用 QImage 类来处理图片数据,并使用 QLabel 或自定义的 QWidget 来显示图片,但是很难通过鼠标进行缩放显示 QGraphicsView可以实现此功能 在Qt中,QGraphi…