2021-07-22-继承

本文通过一个Java程序展示了程序员如何为电脑更换显卡,从集成显卡升级到Geforce,再到Ati显卡,以满足编程、游戏和观影需求。同时,还提供了Car、SubCar、Shape及其子类Circle和Rectangle的Java代码示例,以及Person、Student、Worker类的定义和使用,展示类的继承和方法重写。最后,模拟了西游记中孙悟空、猪八戒和沙和尚的各自职责。
摘要由CSDN通过智能技术生成
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("挑行李");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值