面向对象进阶基础练习
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();}
}
总结
在了解了面向对象进阶的基础知识后,一定要自己独立动手练习代码,为以后的进阶打好基础。学习好面向对象的编程思想,会极大提高代码的复用性和可读性。
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
面向对象进阶基础练习
Java学习笔记(新手纯小白向) 第一章 JAVA基础概念 第二章 JAVA安装和环境配置 第三章 IntelliJ IDEA安装 第四章 运算符 第五章 运算符联系 第六章 判断与循环 第七章 判断与循环练习 第八章 循环高级综合 第九章 数组介绍及其内存图 第十章 数…...
![](https://i-blog.csdnimg.cn/direct/24045b22adee4971a753bf52b3c2344e.png)
iPhone删除所有照片的高效三部曲
苹果手机用久了,系统缓存包括自己使用手机留下的内存肯定会越来越多。其中,相册中的照片数量可能会急剧增加,占据大量的存储空间。当用户们想要对相册进行彻底清理,实现iPhone删除所有照片时,不妨跟随以下详细的三部曲…...
![](https://www.ngui.cc/images/no-images.jpg)
OceanBase 配置项系统变量实现及应用详解(2):系统变量的定义及使用场景
在上一篇博客,配置项的定义及使用方法,详细阐述了配置项的概念及其基本应用方式,这些配置项能够调控集群或租户的行为方式。然而,在实际使用OceanBase的过程中,我们有时仅希望针对当前会话调整某些行为特性,…...
![](https://i-blog.csdnimg.cn/direct/56b5387290e246f0aeba9a3cc44479d6.png)
本地部署,去除动漫图像背景Anime Remove Background
目录 摘要 引言 深度学习在动漫角色中的应用 1.U-Net 2.Mask R-CNN 3.ISNet 模型 4.MODNet 模型 5.InSPyReNet 模型 本地部署 运行效果 测验结果 Tip: 摘要 动漫图像背景去除是一项在图像处理和计算机视觉领域具有重要应用的技术,广泛应用于…...
![](https://www.ngui.cc/images/no-images.jpg)
wireshark与tcpdump使用
wireshark 协议层过滤指令ipip.addr 1.1.1.1ip.src 1.1.1.1ip.dst 1.1.1.1tcptcp.port 80tcp.srcport 80tcp.dstport 80tcp.len > 0tcp.flags.fin 1...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
【密码学】密码学中的四种攻击方式和两种攻击手段
在密码学中,攻击方式通常指的是密码分析者试图破解加密信息或绕过安全机制的各种策略。根据密码分析者对明文、密文以及加密算法的知识程度,攻击可以分为以下四种基本类型: 一、四种攻击的定义 (1)唯密文攻击(COA, C…...
![](https://i-blog.csdnimg.cn/direct/9cb52a733ecd48a79fcb8b198fb6c1c8.png)
网络层的角色与重要性:互联网通信的关键
本章讨论网络层及网络互连问题,也就是讨论多个网络通过路由器互连成为一个互连网络的各种问题。在介绍网络层提供的两种不同服务后,我们开始讲解本章的核心内容——网际协议(IP),这是本书的一项重点内容。只有较深入地…...
![](https://www.ngui.cc/images/no-images.jpg)
Transformer模型:WordEmbedding实现
前言 最近在学Transformer,学了理论的部分之后就开始学代码的实现,这里是跟着b站的up主的视频记的笔记,视频链接:19、Transformer模型Encoder原理精讲及其PyTorch逐行实现_哔哩哔哩_bilibili 正文 首先导入所需要的包:…...
![](https://img-blog.csdnimg.cn/img_convert/6fa0c35f5cd9d626bc6519704be72bf0.webp?x-oss-process=image/format,png)
如何压缩pdf文件大小,怎么压缩pdf文件大小
在数字化时代,pdf文件因其稳定的格式和跨平台兼容性,成为了工作与学习中不可或缺的一部分。然而,随着pdf文件内容的丰富,pdf文件的体积也随之增大,给传输和存储带来了不少挑战。本文将深入探讨如何高效压缩pdf文件大小…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot集成Atomix快速入门Demo
1.什么是Atomix? Atomix是一个能用的Java框架,用来构建高可用的分布式系统。它是基于RAFT协议的实现,为用户提供了各种原子数据结构,比如map/set/integer等,这些数据结构都可以在整个集群中共享并保证一致性ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
Go语言map并发安全,互斥锁和读写锁谁更优?
并发编程是 Go 语言的一大特色,合理地使用锁对于保证数据一致性和提高程序性能至关重要。 在处理并发控制时,sync.Mutex(互斥锁)和 sync.RWMutex(读写锁)是两个常用的工具。理解它们各自的优劣及擅长的场景…...
![](https://i-blog.csdnimg.cn/direct/886907c971e6479e80fc943de5ebe632.png)
Java多线程性能调优
Synchronized同步锁优化方法 1.6之前比较重量级,1.6后经过优化性能大大提升 使用Synchronized实现同步锁住要是两种方式:方法、代码块。 1.代码块 Synchronized在修饰同步代码块时,是由 monitorenter和monitorexit指令来实现同步的。进入mo…...
![](https://i-blog.csdnimg.cn/direct/5f7443f1e3c14e45b602c854cb575545.png)
MacOS 通过Docker安装宝塔面板搭建PHP开发环境
1、docker拉取ubuntu系统 docker pull ubuntu2、运行容器 docker run -i -t -d --name bt -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 -p 3306:3306 -p 6379:6379 --privilegedtrue -v /Users/oi/Sites:/www/wwwroot ubuntu-v 后的 /Users/oi/Sites 代表…...
![](https://i-blog.csdnimg.cn/direct/62146d4a2adb4deab3339d36a24cd8a4.png)
Unity发布webgl之后修改StreamingAssets 内的配置文件读取到的还是之前的配置文件的解决方案
问题描述 unity发布webgl之后,修改在StreamingAssets 中的配置信息,修改之后读取的还是之前的配置信息 读取配置文件的代码IEnumerator IE_WebGL_LoadWebSocketServerCopnfig(){var uri new System.Uri(Path.Combine(Application.streamingAssetsPath…...
![](https://img-blog.csdnimg.cn/img_convert/edaef2ba3c524942f5e5c8e1f7b4b724.jpeg)
离线语音识别芯片在智能生活中的应用
离线语音识别芯片,这一技术正逐渐渗透到我们日常生活的每一个角落,为众多产品带来前所未有的智能体验。它能够应用到多种产品中,包括但不限于: 1、智能音箱:语音识别芯片作为智能音箱的核心,使用户…...
![](https://i-blog.csdnimg.cn/direct/b8d594ff6b7a446d94f0f07fdbd21485.png)
替换:show-overflow-tooltip=“true“ ,使用插槽tooltip,达到内容可复制
原生的show-overflow-tooltip“true” 不能满足条件,使用插槽自定义编辑; 旧code <el-table-column prop"reason" label"原因" align"center" :show-overflow-tooltip"true" /> <el-table-column pro…...
![](https://i-blog.csdnimg.cn/direct/dc19216fa3934a7ea0b9eba9ae0dd5bc.png)
219.贪心算法:柠檬水找零(力扣)
代码解决 class Solution { public:bool lemonadeChange(vector<int>& bills) {int num50, num100; // 初始化5美元和10美元的计数器for(int i0; i < bills.size(); i) // 遍历所有账单{if(bills[i]5) // 如果账单是5美元{num5; // 增加5美元的计数continue; // …...
![](https://www.ngui.cc/images/no-images.jpg)
通过 Azure OpenAI 服务使用 GPT-35-Turbo and GPT-4(win版)
官方文档 Azure OpenAI 是微软提供的一项云服务,旨在将 OpenAI 的先进人工智能模型与 Azure 的基础设施和服务相结合。通过 Azure OpenAI,开发者和企业可以访问 OpenAI 的各种模型,如 GPT-3、Codex 和 DALL-E 等,并将其集成到自己…...
![](https://www.ngui.cc/images/no-images.jpg)
MySQL 面试真题(带答案)
MySQL 场景面试题 目录 场景1:用户注册和登录系统 1.1 数据库设计1.2 用户注册1.3 用户登录 场景2:订单管理系统 2.1 数据库设计2.2 创建订单2.3 查询订单 场景3:博客系统 3.1 数据库设计3.2 发布文章3.3 评论功能 场景1:用户…...
![](https://img-blog.csdnimg.cn/img_convert/4d3c927549f6a01b9855d6455f5eeee0.jpeg)
《A++ 敏捷开发》- 10 二八原则
团队成员协作,利用项目数据,分析根本原因,制定纠正措施,并立马尝试,判断是否有效,是改善的“基本功”。10-12章会探索里面的注意事项,13章会看两家公司的实施情况和常见问题。 如果已经获得高层…...
![](https://www.ngui.cc/images/no-images.jpg)
Spring Boot 框架知识汇总
1、什么是SpringBoot? 通过Spring Boot,可以轻松地创建独立的,基于生产级别的Spring的应用程序,您可以“运行"它们。大多数Spring Boot应用程序需要最少的Spring配置,集成了大量常用的第三方库配置,使…...
![](https://img-blog.csdnimg.cn/img_convert/a9e424999a2355f7a86b089de5501adc.png)
国产麒麟、uos在线编辑word文件并控制编辑区域(局部编辑)
windows系统也适用,该插件可同时支持windows和国产系统 在实际项目开发中,以下场景可能会用到Word局部编辑功能: 合同审批公文流转策划设计报告汇签单招投标(标书文件)其他,有模板且需要不同人员协作编辑…...
![](https://i-blog.csdnimg.cn/direct/706a89072afb4e2d84eb02469ae978aa.png)
Go:基本变量与数据类型
目录 前言 前期准备 Hello World! 一、基本变量 1.1 声明变量 1.2 初始化变量 1.3 变量声明到初始化的过程 1.4 变量值交换 1.5 匿名变量 1.6 变量的作用域 二、数据类型 1.1 整型 1.2 浮点型 1.3 字符串 1.4 布尔类型 1.5 数据类型判断 1.6 数据类型转换 1.…...
![](https://i-blog.csdnimg.cn/direct/ad16be0d99c74254b833f03e7f4f6edd.png)
计算器原生js
目录 1.HTML 2.CSS 2.JS 4.资源 5.运行截图 6.下载连接 7.注意事项 1.HTML <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-s…...
![](https://img-blog.csdnimg.cn/img_convert/4d0f02fea7a3e042a4af614c9cd62eb7.png)
怎样将aac转换mp3格式?推荐四个aac转MP3的方法
怎样将aac转换mp3格式?当需要将aac格式音频转换为MP3格式时,有几种方法可以轻松实现这一目标。MP3是一种广泛支持的音频格式,几乎所有设备和平台都能播放MP3文件,包括各种音乐播放器、手机、平板电脑和汽车音响系统。而且它也提供…...
![](https://i-blog.csdnimg.cn/direct/9d623d21d89749379118fa73aac64911.png)
MongoDB - 查询操作符:比较查询、逻辑查询、元素查询、数组查询
文章目录 1. 构造数据2. MongoDB 比较查询操作符1. $eq 等于1.1 等于指定值1.2 嵌入式文档中的字段等于某个值1.3 数组元素等于某个值1.4 数组元素等于数组值 2. $ne 不等于3. $gt 大于3.1 匹配文档字段3.2 根据嵌入式文档字段执行更新 4. $gte 大于等于5. $lt 小于6. $lte 小于…...
![](https://i-blog.csdnimg.cn/direct/b2c1dc2a108d4d2685d0e220e388ce6e.png)
html5——CSS高级选择器
目录 属性选择器 E[att^"value"] E[att$"http"] E[att*"http"] 关系选择器 子代: 相邻兄弟: 普通兄弟: 结构伪类选择器 链接伪类选择器 伪元素选择器 CSS的继承与层叠 CSS的继承性 CSS的层叠性 …...
![](https://www.ngui.cc/images/no-images.jpg)
Python-数据爬取(爬虫)
~~~理性爬取~~~ 杜绝从入门到入狱 1.简要描述一下Python爬虫的工作原理,并介绍几个常用的Python爬虫库。 Python爬虫的工作原理 发送请求:爬虫向目标网站发送HTTP请求,通常使用GET请求来获取网页内容。解析响应:接收并解析HTTP响…...
![](https://i-blog.csdnimg.cn/direct/d8941d306b3b4cafbe93d9c37ad43478.png)
虚幻引擎ue5如何调节物体锚点
当发现锚点不在物体上时,如何调节瞄点在物体上。 步骤1:按住鼠标中键拖动锚点,在透视图中多次调节锚点位置。 步骤2:在物体上点击鼠标右键点击-》锚定--》“设置为枢轴偏移”即可。...
![](https://www.ngui.cc/images/no-images.jpg)
Xcode持续集成之道:自动化构建与部署的精粹
标题:Xcode持续集成之道:自动化构建与部署的精粹 在快节奏的软件开发中,持续集成(Continuous Integration, CI)是提升开发效率和软件质量的关键实践。Xcode作为苹果生态中的核心开发工具,提供了与多种持续…...
![](/images/no-images.jpg)
如何做招生网站/短链接
1. electron:跨平台,离线优先的桌面端开发框架。 2. electron是由俩种进程组成,包括主进程和0个或n个渲染进程。 2.1 主进程:承担应用的生命周期(包括启动,退出,准备,正在切换到后台…...
![](/images/no-images.jpg)
网页设计网站设计哪个好/seo视频教程我要自学网
原文:http://www.cnblogs.com/xdp-gacl/p/4058008.html 一、聚合 如果我们想一次构建多个项目模块,那我们就需要对多个项目模块进行聚合 1.1、聚合配置代码 1 <modules> 2 <module>模块一</module> 3 <module>模块二</module…...
![](https://img-blog.csdnimg.cn/2022010704344158983.png)
免费弄空间的网站/广告宣传语
Java 基础 1: int a 1; int m1 a 3; 结果 :m1 5;a2; a表示先赋值2: int a 1; int m a3; 结果 m 4; a 2; a表示后赋值3:m<<2 表示 m*2*2m<< 3 表示 m*2*2*2int result 5<<2 ;//a 20 5*2*2 ;int resul…...
![](/images/no-images.jpg)
服装网站建设规划/海豹直播nba
题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。 写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000,000)[a,b](5≤a<b≤100,000,000)( 一亿)间的所有回文质数。 输入格式 …...
![](https://img-blog.csdnimg.cn/img_convert/4f369fa976dc3f4e9bfd4ab4c314d2ba.png)
医院网站备案流程/seo优化培训学校
线下展会向来是3A厂商沟通国内玩家最有效的窗口之一,6月29日举办的杉果π展会活动,育碧、万代、卡普空等众多知名游戏厂商携旗下招牌游戏齐聚现场,为玩家带来最新的游戏试玩体验。展会一天内需要接纳数百位玩家,会场网络本身就面临…...
![](https://img-blog.csdnimg.cn/img_convert/031eee0b0377beb418581f9bbc04a4da.png)
青海省网站建设平台/品牌seo培训咨询
在php中,能够运用preg_replace()函数合营正则表达式(/\\d/)来去掉字符串中的数字字符;语法“preg_replace("/\\d/",, 指定字符串);”。preg_replace实行一个正则表达式的搜刮和替代。引荐:《PHP视频教程》php去掉字符串中的数字字符…...