5.1 电脑装配一显卡 Computer:电脑中有一个属性,属性类型就是显卡(组合关系) Geforce 显卡的子类 Ati 显卡的子类 场景:程序员xxx去电脑专卖店购买了xx品牌的电脑,使用了一段时间之后(编程序、玩玩游 戏、看看电影等等),嫌电脑原装的集成显卡不够给力, 就去电脑专卖店购买了Geforce 类型的独立显卡,并请店家安装上,使用了一段时 间之后(编程序、玩玩游戏、看看电影等等);听说ati类型的显卡 更好, 就去电脑专卖店购买了Ati 类型的独立显卡,并请店家安装上,使用了一段 时间(编程序、玩玩游戏、看看电影等等)。
public class Programmer{
private String name;
private Computer computer;
public void buyComputer(){
System.out.println(this.name+"买电脑");
computer = new Computer();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void useComputer(){
computer.showGraphicsCard();
computer.programming();
computer.playGame();
computer.watchMovie();
}
public void changeGraphicsCardToGef(){
computer.setGraphicsCard(new Geforce());
}
public void changeGraphicsCardToAti(){
computer.setGraphicsCard(new Ati());
}
public static void main(String[] args) {
Programmer programmer = new Programmer();
programmer.setName("法外狂徒张三");
programmer.buyComputer();
programmer.useComputer();
programmer.changeGraphicsCardToGef();
programmer.useComputer();
programmer.changeGraphicsCardToAti();
programmer.useComputer();
}
}
class Computer {
private GraphicsCard graphicsCard;
public Computer() {
this.graphicsCard = new GraphicsCard();
graphicsCard.setName("原装显卡");
graphicsCard.setDefinition("1080P");
}
public void programming(){
System.out.println("使用电脑编程");
}
public void playGame(){
System.out.println("使用电脑玩游戏");
}
public void watchMovie(){
System.out.println("使用电脑看电影");
}
public void showGraphicsCard(){
System.out.println(this.getGraphicsCard().getName()+"正在渲染图形,分辨率为"+this.getGraphicsCard().getDefinition());
}
public GraphicsCard getGraphicsCard() {
return graphicsCard;
}
public void setGraphicsCard(GraphicsCard graphicsCard) {
System.out.println(this.getGraphicsCard().getName()+"换成售价"+graphicsCard.getPrice()+"的"+graphicsCard.getName());
this.graphicsCard = graphicsCard;
}
}
class GraphicsCard{
private String name;
private double price;
private String definition;
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getDefinition() {
return definition;
}
public void setName(String name){
this.name = name;
}
public void setDefinition(String definition){
this.definition = definition;
}
public GraphicsCard() {
}
public GraphicsCard(String name, double price, String definition) {
this.name = name;
this.price = price;
this.definition = definition;
}
}
class Geforce extends GraphicsCard{
public Geforce() {
super("Geforce显卡",1999.0,"2k");
}
}
class Ati extends GraphicsCard{
public Ati() {
super("Ati显卡",2999.0,"4k");
}
}
7.1 编写一个Java程序,并满足如下要求: 编写一个Car类,具有: 属性: 品牌(mark) - String类型 功能: 驾驶 void drive() 定义Car类的子类SubCar,具有: 属性: 价格(price)、速度(Speed) - int类型 功能: 变速 void speedChange(int newSpeed),把新速度赋值给 speed 定义主类E,在其main方法中创建SubCar类的两个对象:aodi和benchi的对象并测试其 对象的特性。
public class Car {
public String mark;
public void drive(){
System.out.println("汽车正在行驶");
}
public Car(String mark) {
this.mark = mark;
}
public static void main(String[] args) {
SubCar aodi = new SubCar("aodi", 999999, 0);
SubCar benchi = new SubCar("benchi", 888888, 0);
aodi.speedChange(120);
aodi.speedChange(0);
System.out.println(aodi);
System.out.println(benchi);
}
}
class SubCar extends Car{
private int price;
private int speed;
public void speedChange(int newSpeed){
System.out.println("汽车速度由"+speed+"变为"+newSpeed);
this.speed = newSpeed;
}
public SubCar(String mark,int price, int speed) {
super(mark);
this.price = price;
this.speed = speed;
}
@Override
public String toString() {
return "SubCar{" +
"mark='" + mark + '\'' +
", price=" + price +
", speed=" + speed +
'}';
}
}
7 .2 编写一个类Shape,声明计算图形面积的方法。再分别定义Shape的子类Circle(圆)和 Rectangle(矩形),在两个子类中按照不同图形的面积计算公式,实现Shape类中计算面积 的方法。
public class Shape {
public double getShapeArea(){
return 0.0;
}
public static void main(String[] args) {
System.out.println("圆的面积是"+new Circle(1.0).getShapeArea());
System.out.println("矩形的面积是"+new Rectangle(2.0,4.0).getShapeArea());
}
}
class Circle extends Shape{
private double r;
private final double pi = 3.14;
public Circle(double r) {
this.r = r;
}
@Override
public double getShapeArea() {
return this.pi*this.r*this.r;
}
}
class Rectangle extends Shape{
private double width;
private double high;
public Rectangle(double width, double high) {
this.width = width;
this.high = high;
}
@Override
public double getShapeArea() {
return width*high;
}
}
7.3 定义一个人类,包括属性:姓名、性别、年龄、国籍;包括方法:吃饭、睡觉,工作。
1) 根据人类,派生一个学生类,增加属性:学校、学号;重写工作方法(学生的工作是学习)。
public class Person {
String name;
String sex;
int age;
String nationality;
public void eat(){
System.out.println("吃饭");
}
public void sleep(){
System.out.println("睡觉");
}
public void work(){
System.out.println("工作");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
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;
}
public Person(String name, String sex, int age, String nationality) {
this.name = name;
this.sex = sex;
this.age = age;
this.nationality = nationality;
}
}
class Student extends Person{
private String school;
private int number;
public Student(String name,String sex,int age,String nationality,String school, int number) {
super(name,sex,age,nationality);
this.school = school;
this.number = number;
}
@Override
public void work() {
System.out.println("学习");
}
}
2). 根据人类,派生一个工人类,增加属性:单位、工龄;重写工作方法(工人的工作 是……自己想吧)。
class Worker extends Person{
private String company;
private int wokeAge;
public Worker(String name, String sex, int age, String nationality, String company, int wokeAge) {
super(name, sex, age, nationality);
this.company = company;
this.wokeAge = wokeAge;
}
@Override
public void work() {
System.out.println("码代码");
}
@Override
public String toString() {
return "Worker{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", nationality='" + nationality + '\'' +
", company='" + company + '\'' +
", wokeAge=" + wokeAge +
'}';
}
}
3). 根据学生类,派生一个学生干部类,增加属性:职务;增加方法:开会。
class StudentCadres extends Person{
private String job;
public StudentCadres(String name, String sex, int age, String nationality,String job) {
super(name, sex, age, nationality);
this.job = job;
}
public void meeting(){
System.out.println("学生干部"+job+"开会");
}
}
4). 编写主函数分别对上述3类具体人物进行测试。
public static void main(String[] args) {
Student student = new Student("小李", "女", 18, "中国", "北大", 1);
student.work();
student.eat();
student.sleep();
Worker worker = new Worker("码农", "男", 25, "中国", "华为", 3);
worker.work();
worker.toString();
StudentCadres studentCadres = new StudentCadres("张三", "男", 19, "中国", "团支书");
studentCadres.meeting();
studentCadres.work();
}
7.4 西游记中,3个徒弟,共同的方法(吃斋,念佛,取经),孙悟空自己的方法(除妖),猪 八戒自己的方法(牵马),沙和尚自己的方法(挑行李)
public class XiYouJi {
public void cz(){
System.out.println("吃斋");
}
public void nf(){
System.out.println("念佛");
}
public void qj(){
System.out.println("取经");
}
public static void main(String[] args) {
Sun sun = new Sun();
Zhu zhu = new Zhu();
Sha sha = new Sha();
sun.cy();
zhu.qm();
sha.dxx();
sun.cz();
zhu.nf();
sha.qj();
}
}
class Sun extends XiYouJi{
public void cy(){
System.out.println("除妖");
}
}
class Zhu extends XiYouJi{
public void qm(){
System.out.println("牵马");
}
}
class Sha extends XiYouJi{
public void dxx(){
System.out.println("挑行李");
}
}