当前位置: 首页 > news >正文

Java【14_1】初始化块、多态(测试题)

测试题

1、写出程序结果 (仔细认真)
public class MyClass{
    static int x,y;
    {
        x=5;
        x--;
    }
    static{
        x--;
    }
    public static void main(String[] args) {
        x--;
        myMethod();
        System.out.println(x+y + ++x);
    }
    public static void myMethod() {
        y=x++ + ++x;
    }
}

2、写出下列程序运行结果  
public class MyClass {
    public static void main(String[] args) {
        Base b1 = new Base();
        Base b2 = new Sub();

        System.out.println(b1.name);
        System.out.println(b2.name);
    }
}
class Base {
    String name="Base";
    Base() {
        this.method(100);
    }
    public void method(int i) {
        System.out.println("base : " + i);
    }
}
class Sub extends Base {
    String name="Sub";
    Sub() {
        super.method(70);
    }

    public void method(int j) {
        System.out.println("sub : " + j);
    }
}


测试题1:-1
【分析1】
    {
        x=5;
        x--;
    }
实例初始化块
每次实例化对象自动执行的一个代码块。
MyClass中的main函数,没有出现过 new MyClass ,实例初始化块不会执行!


测试题2:
base : 100
sub : 100
base : 70
Base
Base

【分析2】
        Base b2 = new Sub();

执行到上面这一句时,
因为每一个构造器的首行都默认存在一行代码 super()  默认调用父类无参。Java【11】中提到过!
    Sub() {
        super();
        super.method(70);
    }


案例1:

  1、在com.atguigu.bean包中声明员工类(Employee)、程序员类(Programmer)、设计师类(Designer)、架构师类(Architect),这四个类相邻为父子关系。

- 员工类属性:编号、姓名、年龄、薪资
- 程序员类属性:编程语言,默认都是"java"
- 设计师类属性:奖金
- 架构师类属性:持有股票数量

  要求:属性私有化,无参有参构造,get/set,getInfo方法(考虑重写)

  2、在com.atguigu.test包中声明Test13测试类

  (1)在main中有一些常量和一个二维数组

  final int EMPLOYEE = 10;//表示普通员工
  final int PROGRAMMER = 11;//表示程序员
  final int DESIGNER = 12;//表示设计师
  final int ARCHITECT = 13;//表示架构师

  String[][] EMPLOYEES = {
          {"10", "1", "段誉", "22", "3000"},
          {"13", "2", "令狐冲", "32", "18000", "15000", "2000"},
          {"11", "3", "任我行", "23", "7000"},
          {"11", "4", "张三丰", "24", "7300"},
          {"12", "5", "周芷若", "28", "10000", "5000"},
          {"11", "6", "赵敏", "22", "6800"},
          {"12", "7", "张无忌", "29", "10800","5200"},
          {"13", "8", "韦小宝", "30", "19800", "15000", "2500"},
          {"12", "9", "杨过", "26", "9800", "5500"},
          {"11", "10", "小龙女", "21", "6600"},
          {"11", "11", "郭靖", "25", "7100"},
          {"12", "12", "黄蓉", "27", "9600", "4800"}
      };

  (2)创建一个员工数组
  (3)根据以上数据,初始化员工数组

  提示:把字符串转为int和double类型的值,可以使用如下方式:
  String idStr = "1";
  int id = Integer.parseInt(idStr);

  String salaryStr = "7300";
  double salary = Double.parseDouble(salaryStr);

  (4)遍历数组,使用如下格式
  编号    姓名    年龄    薪资    语言    奖金    股票


【操作步骤】
步骤1:打开“IntelliJ IDEA 2019.2.3 x64”Java开发软件,顶部菜单选择:
File - New - Project... ,弹出窗口中选择“Empty Project”- 点击 Next
Project name: java0225
Project location: D:\javademo\java0225
点击 Finish

步骤2:顶部菜单选择:
File - New - Module... ,弹出窗口中选择“Java”- Module SDK: 1.8 - 点击 Next
Module name: day13
Content root: D:\javademo\java0225\day13
Module file location: D:\javademo\java0225\day13
点击 Finish

步骤3:点击 day13 下面的 “src”右击:
New - Java Class - 输入:com.atguigu.bean.Employee
回车(键盘Enter确定)创建如下类:

【路径】bean/Employee.java
package com.atguigu.bean;

public class Employee {
    private int id;
    private String name;
    private int age;
    private double salary;

    public Employee(int id, String name, int age, double salary) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public Employee() {
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

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

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getInfo(){
        return id+"\t"+name+"\t"+age+"\t"+salary;
    }
}


【路径】bean/Programmer.java
package com.atguigu.bean;

public class Programmer extends Employee {
    private String language="java";

    public Programmer(int id, String name, int age, double salary, String language) {
        super(id, name, age, salary);
        this.language = language;
    }

    public Programmer() {
    }

    public String getLanguage() {
        return language;
    }

    public void setLanguage(String language) {
        this.language = language;
    }

    /*public String getInfo(){
        return getId()+""+getName()+""+getAge()+""+getSalary()+""+language;
    }*/

    public String getInfo(){//死递归
        return super.getInfo()+"\t"+language;
    }
}


【路径】bean/Designer.java
package com.atguigu.bean;

public class Designer extends Programmer {
    private double bonus;

    public Designer(int id, String name, int age, double salary, String language, double bonus) {
        super(id, name, age, salary, language);
        this.bonus = bonus;
    }

    public Designer() {
    }

    public double getBonus() {
        return bonus;
    }

    public void setBonus(double bonus) {
        this.bonus = bonus;
    }

    public String getInfo(){
        return super.getInfo()+"\t"+bonus;
    }
}


【路径】bean/Architect.java
package com.atguigu.bean;

public class Architect extends Designer{
    private double stock;

    public Architect(int id, String name, int age, double salary, String language, double bonus, double stock) {
        super(id, name, age, salary, language, bonus);
        this.stock = stock;
    }

    public Architect() {
    }

    public double getStock() {
        return stock;
    }

    public void setStock(double stock) {
        this.stock = stock;
    }

    public String getInfo(){
        return super.getInfo()+"\t"+stock;
    }
}


【路径】test/Test13.java
package com.atguigu.test;
import com.atguigu.bean.*;

public class Test13 {
    public static void main(String[] args) {
        final int EMPLOYEE = 10;//表示普通员工
        final int PROGRAMMER = 11;//表示程序员
        final int DESIGNER = 12;//表示设计师
        final int ARCHITECT = 13;//表示架构师

        String[][] EMPLOYEES = {
                {"10", "1", "段誉", "22", "3000"},
                {"13", "2", "令狐冲", "32", "18000", "15000", "2000"},
                {"11", "3", "任我行", "23", "7000"},
                {"11", "4", "张三丰", "24", "7300"},
                {"12", "5", "周芷若", "28", "10000", "5000"},
                {"11", "6", "赵敏", "22", "6800"},
                {"12", "7", "张无忌", "29", "10800","5200"},
                {"13", "8", "韦小宝", "30", "19800", "15000", "2500"},
                {"12", "9", "杨过", "26", "9800", "5500"},
                {"11", "10", "小龙女", "21", "6600"},
                {"11", "11", "郭靖", "25", "7100"},
                {"12", "12", "黄蓉", "27", "9600", "4800"}
        };
        //1. 创建存储员工的数组
        Employee[] employees=new Employee[EMPLOYEES.length];
        //2. 循环二维数组,产生对象的属性值
        for (int i = 0; i < EMPLOYEES.length; i++) {
            String flag=EMPLOYEES[i][0];//每个小数组的第一个值
            //兼容性好以下(String被switch支持是1.7的版本)
            int num=Integer.parseInt(flag);
            int id=Integer.parseInt(EMPLOYEES[i][1]);
            String name=EMPLOYEES[i][2];
            int age=Integer.parseInt(EMPLOYEES[i][3]);
            double salary=Double.parseDouble(EMPLOYEES[i][4]);
            switch (num){
                case EMPLOYEE:
                    employees[i]=new Employee(id,name,age,salary);
                    break;
                case PROGRAMMER:
                    employees[i]=new Programmer(id,name,age,salary,"java");
                    break;
                case DESIGNER:
                    double bonus=Double.parseDouble(EMPLOYEES[i][5]);
                    employees[i]=new Designer(id,name,age,salary,"java",bonus);
                    break;
                case ARCHITECT:
                    double bonus1=Double.parseDouble(EMPLOYEES[i][5]);
                    double stock=Double.parseDouble(EMPLOYEES[i][6]);
                    employees[i]=new Architect(id,name,age,salary,"java",bonus1,stock);
                    break;
            }
        }
        //展示信息
        System.out.println("编号\t姓名\t年龄\t工资\t语言\t奖金\t股票");
        for (int i = 0; i <employees.length ; i++) {
            System.out.println(employees[i].getInfo());
        }
    }
}


在Test13.java文件中,右击 - Debug 'Test13.main()'
输出如下:

编号    姓名    年龄    工资    语言    奖金    股票
1    段誉    22    3000.0
2    令狐冲    32    18000.0    java    15000.0    2000.0
3    任我行    23    7000.0    java
4    张三丰    24    7300.0    java
5    周芷若    28    10000.0    java    5000.0
6    赵敏    22    6800.0    java
7    张无忌    29    10800.0    java    5200.0
8    韦小宝    30    19800.0    java    15000.0    2500.0
9    杨过    26    9800.0    java    5500.0
10    小龙女    21    6600.0    java
11    郭靖    25    7100.0    java
12    黄蓉    27    9600.0    java    4800.0

相关文章:

  • 黑客帝国电子表html
  • Java 多态学习笔记(详细版)
  • Java并发编程中的死锁与竞态条件:原理、案例与解决方案
  • 【DAY21】 常见的降维算法
  • Android屏幕采集编码打包推送RTMP技术详解:从开发到优化与应用
  • JavaScript 中的 for...in 和 for...of 循环详解
  • JavaScript进阶(十)
  • ai agent(智能体)开发 python高级应用6:用crawl4ai0.6.3抓取分类 形成每日简报
  • day 28
  • 543.二叉树的直径
  • JavaScript基础-对象的相关概念
  • 洛谷 全排列问题
  • BUUCTF——Nmap
  • java的面向对象思想
  • 小蜗牛拨号助手用户使用手册
  • 2.1.3
  • 【基于栈的 Vue3 路由历史管理:优雅处理多系统间的导航】
  • 使用python进行船舶轨迹跟踪
  • 符合Python风格的对象(对象表示形式)
  • 使用HtmlAgilityPack采集墨迹天气中的天气数据
  • 陕西:未来一周高温持续,继续发布冬小麦干热风风险预警
  • 上海将建设万兆小区、园区及工厂,为模型训练数据的传输提供硬件支持
  • 江南考古文脉探寻
  • 天算星座二期首批卫星成功发射,将助力6G空天信息基础设施建设
  • 新城市志|GDP万亿城市,一季度如何挑大梁
  • 技术派|威胁F-35、击落“死神”,胡塞武装防空战力如何?