javase复习day13_面对对象进阶_static

面对对象进阶

static

工具类:

工具类的构造要求

工具类练习一:

工具类:

public  class ArrayUtil {


    //私有化构造方法
    private ArrayUtil() {
    }

    //静态方法,方便调用
    public static String printArr(int[] arr){
        String result = "";
        result = result+"[";
        for (int i = 0; i < arr.length; i++) {

           //最后一个不需要加逗号
           if (i==arr.length-1){
               result += arr[i];
           }else {
               result += arr[i] + ", ";
           }
        }
        result = result+"]";
        return result;
    }

    public static double getAerage(double[] arr){
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        double avg;
        avg = sum/arr.length;
        return avg;
    }


}

测试类:

public class TestDemo {
    public static void main(String[] args) {
        //生成一个数组
        int[] arr = {1,2,3,4,5,6,7,8,9,10};
        //调用静态方法进行验证
        System.out.println(ArrayUtil.printArr(arr));

        double[] arr2 = {1.1,2.2,3.3,4.4,55,66};
        System.out.println(ArrayUtil.getAerage(arr2));

    }
}

工具类练习二:

学生类:

//使用插件生成的javaBean类(Ptg插件)
public class Student {
    private String name;
    private int age;
    private String gender;


    public Student() {
    }

    public Student(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return age
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置
     * @param age
     */
    public void setAge(int age) {
        this.age = age;
    }

    /**
     * 获取
     * @return gender
     */
    public String getGender() {
        return gender;
    }

    /**
     * 设置
     * @param gender
     */
    public void setGender(String gender) {
        this.gender = gender;
    }

    public String toString() {
        return "Student{name = " + name + ", age = " + age + ", gender = " + gender + "}";
    }
}

学生工具类:

public class StudentUtil {
    private StudentUtil() {
    }
    //工具类中的方法
    public static int MaxAge(ArrayList<Student> arr){
        int maxage = 0;
        //循环获取学生对象的年龄
        for (int i = 0; i < arr.size(); i++) {
            if (maxage < arr.get(i).getAge()){
                maxage = arr.get(i).getAge();
            }
        }
        return maxage;
    }
}

测试类:

public class TestDemo2 {
    public static void main(String[] args) {
        //创建学生对象并赋值给学生集合
//        Student[] arr = new Student[3];
        ArrayList<Student> arr = new ArrayList<>();
        Student s1 = new Student("张三",20,"男");
        Student s2 = new Student("李四",25,"男");
        Student s3 = new Student("娜娜",21,"女");

        arr.add(s1);
        arr.add(s2);
        arr.add(s3);

        //调用方法
        int i = StudentUtil.MaxAge(arr);
        System.out.println(i);
    }
}

static的注意事项:

static小结:

重识main方法

选择编辑按钮。

public class Test {
    public static void main(String[] args) {
        //String 数组的类型
        //[] 表示这是数组
        // args 数组名称
        // 在低版本的java中用于接受键盘的输入
        System.out.println(args.length);
        for (int i = 0; i < args.length; i++) {
            System.out.println(args[i]);
        }
    }
}

运行结果:

3
hello
world
java
 

表明数组有三个String字符串组成

继承

面对对象三大特征:

封装,继承,多态。

封装:

继承

继承的学习要点

  • 如何自己写继承(自己设计)
  • 如何使用别人写的继承
什么时间用继承

继承的小结:

继承的特点

继承的特点小结

注意事项:

  • 子类只能继承父类中非私有的成员。

练习:继承练习(自己设计一个继承体系)

public class Animal {
    public  void eat(){
        System.out.println("吃饭");
    }
    public  void drink(){
        System.out.println("喝水");
    }
}
public class Cat extends Animal{
    public  void catch_mice(){
        System.out.println("抓老鼠");
    }
}
public class Dog extends Animal {
    public  void special(){
        System.out.println("看家");
    }
}
public class Ragdoll extends Cat{
}
public class Dragon_Li extends Cat {
}
public class Huskies extends Dog{
    public  void destruction(){
        System.out.println("拆家");
    }
}
public class Teddy extends Dog{
    public void coquetry(){
        System.out.println("蹭一蹭");
    }
}
public class Test {
    public static void main(String[] args) {
        Ragdoll r = new Ragdoll();
        r.eat();
        r.drink();
        r.catch_mice();
        System.out.println("====================================");
        Huskies h = new Huskies();
        h.destruction();
        h.drink();
        h.eat();
        h.special();
    }
}
子类可以继承的东西

继承的内存图

成员方法是否被继承

成员方法的继承的内存图

成员变量的访问特点:

public class Test {
    public static void main(String[] args) {
        zi z = new zi();
        z.show();
    }
}
class Fu{
    String name = "FU";
    String hobby = "喝茶";
}
class zi extends Fu{
    String name = "zi";
    String game = "吃鸡";
    public void show(){
        //打印zi
        System.out.println(this.name);
        //打印吃鸡
        System.out.println(game);
        //打印FU
        System.out.println(super.name);
        //打印喝茶
        System.out.println(hobby);
    }
}
成员方法的访问特点:

方法的重写

方法重写的本质

修改了虚方法表中的方法,如果方式重写,就会覆盖虚方法表中的方法

重写的注意事项

练习:利用方法的重写设计继承结构

public class Dog {
    public  void special(){
        System.out.println("看家");
    }
    public  void eat(){
        System.out.println("吃饭");
    }
    public  void drink(){
        System.out.println("喝水");
    }
}
public class Huskies extends Dog {
    public  void destruction(){
        System.out.println("拆家");
    }
    @Override
    public  void eat(){
        System.out.println("吃狗粮");
    }
}
public class ShaPiDog extends Dog{
    @Override
    public  void eat(){
        System.out.println("吃狗粮,吃骨头");
    }
}
public class tianYuanDog extends Dog{
    @Override
    public  void eat(){
        System.out.println("吃剩饭");
    }
}
public class Test {
    public static void main(String[] args) {
        Demo.ChongXieTest.Huskies r = new Demo.ChongXieTest.Huskies();
        r.eat();
        r.drink();
        r.eat();
        r.destruction();
        System.out.println("====================================");
        tianYuanDog h = new tianYuanDog();
        h.drink();
        h.eat();
        h.special();
        System.out.println("====================================");
        ShaPiDog s = new ShaPiDog();
        s.drink();
        s.eat();
        s.special();
    }
}
方法重写的总结:

继承中构造方法的访问特点:

public class fuClass {
    public String name;
    public int age;

    public fuClass() {
        System.out.println("父类的无参构造");
    }

    public fuClass(String name, int age) {
        this.name = name;
        this.age = age;
        System.out.println("调用父类的有参构造");
    }
}
public class ziClass extends fuClass{
    public ziClass() {
        super();
        System.out.println("调用子类无参构造");
    }

    public ziClass(String name, int age) {
        super(name, age);
        System.out.println("调用子类有参构造");
    }
}
public class test {
    public static void main(String[] args) {
        ziClass z = new ziClass();
        ziClass z1 = new ziClass("小李",20);
    }
}
this和super总结

练习:带有继承结构的标准javaBean

package Test.Test1;

public class Empyee {
   private String id;
   private String name;
   private int price;

   public void work(){
       System.out.println("员工正在工作");
   }
   public void eat(){
       System.out.println("员工正在吃饭");
   }

    @Override
    public String toString() {
        return "Empyee{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    public Empyee() {
    }

    public Empyee(String id, String name, int price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

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

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }
}
package Test.Test1;

public class JinLi extends Empyee {
    private int parc;

    public JinLi() {}

    public JinLi(String id, String name, int price, int parc) {
        super(id, name, price);
        this.parc = parc;
    }

    @Override
    public void work() {
        System.out.println("管理他人");
    }

    @Override
    public String toString() {
        return "JinLi{" +
                "parc=" + parc +
                '}';
    }
}
package Test.Test1;

public class Cook extends Empyee{
    public Cook() {
    }

    public Cook(String id, String name, int price) {
        super(id, name, price);
    }

    @Override
    public void work() {
        System.out.println("炒菜");
    }


}
package Test.Test1;

public class Test2 {
    public static void main(String[] args) {
        JinLi j = new JinLi("heima001","小赵",12000,8000);
        j.work();
        j.eat();
        System.out.println("“========================”");
        Cook c = new Cook();
        c.setId("www");
        c.setName("小王");
        c.setPrice(18888);
        c.work();
        c.eat();
    }
}
练习二:

public class Employee {
  private   String name;
  private String id;

  public void work(){
      System.out.println("工作");
  }

    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 Employee() {
    }

    public Employee(String name, String id) {
        this.name = name;
        this.id = id;
    }
}
package Test.Test2;

public class Teacher extends Employee{
    public Teacher() {
    }

    public Teacher(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class AdminStaff extends Employee{
    public AdminStaff() {
    }

    public AdminStaff(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class Lectuer extends Teacher{
    @Override
    public void work() {
        System.out.println("讲师工作");
    }

    public Lectuer() {
    }

    public Lectuer(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class Tutor extends Teacher{
    @Override
    public void work() {
        System.out.println("助教工作");
    }

    public Tutor() {
    }

    public Tutor(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class Maintainer extends AdminStaff{
    @Override
    public void work() {
        System.out.println("维护专员工作");
    }

    public Maintainer() {
    }

    public Maintainer(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class Buyer extends AdminStaff{
    @Override
    public void work() {
        System.out.println("采购专管员工作");
    }

    public Buyer() {
    }

    public Buyer(String name, String id) {
        super(name, id);
    }
}
package Test.Test2;

public class Test {
    public static void main(String[] args) {
        Lectuer l = new Lectuer("小李","heima111");
        l.work();

        Maintainer m = new Maintainer();
        m.work();
    }
}

课后练习

第一题

第一题:

需求:

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

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

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

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

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

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

答案同上。

第二题:

第二题:

需求:

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

分析:

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

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

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

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

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

package Test.workTest2;

public class User {
    private String name;
    private int age;

    public void look(){
        System.out.println("查看课表");
    }

    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 User() {
    }

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
class Teacher extends User{
    //部门名称
    private String workname;

    public void work(){
        System.out.println("发布问题");
    }

    public String getWorkname() {
        return workname;
    }

    public void setWorkname(String workname) {
        this.workname = workname;
    }

    public Teacher(String workname) {
        this.workname = workname;
    }

    public Teacher(String name, int age, String workname) {
        super(name, age);
        this.workname = workname;
    }
}

class student extends User{
    private String classname;

    public void leanclass(){
        System.out.println("填写上课反馈");
    }

    public String getClassname() {
        return classname;
    }

    public void setClassname(String classname) {
        this.classname = classname;
    }

    public student(String classname) {
        this.classname = classname;
    }

    public student(String name, int age, String classname) {
        super(name, age);
        this.classname = classname;
    }
}
package Test.workTest2;

public class Test {
    public static void main(String[] args) {
        student s = new student("小李",18,"后端一期");
        System.out.println(s.getClassname());
        s.leanclass();
        s.look();

        System.out.println("====================");
        Teacher t = new Teacher("老王",40,"教学部");
        System.out.println(t.getWorkname());
        t.look();
        t.work();
    }
}

第三题:

第三题:

需求:

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

1.手机类Phone

属性:品牌brand,价格price

无参构造,有参构造

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

2.测试类

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

思考:

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

提示:

可以把size定义为静态

package Test.Test3;

public class Phone {
    private String brand;
    private int price;

    public static int size;

    public void call(){
        System.out.println("打电话");
    }
    public void sendMessage(){
        System.out.println("发短信");
    }
    public void playGame(){
        System.out.println("玩游戏");
    }


    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public Phone(String brand, int price) {
        this.brand = brand;
        this.price = price;
        this.size = 6;
    }

    public Phone() {
        this.size = 6;
    }

    public static int getSize() {
        return size;
    }

    public static void setSize(int size) {
        Phone.size = size;
    }

    @Override
    public String toString() {
        return "Phone{" +
                "brand='" + brand + '\'' +
                ", price=" + price + "xiae:"+
                size+
                '}';
    }
}
package Test.Test3;

public class Test {
    public static void main(String[] args) {
        Phone p = new Phone();
        System.out.println(p);
        p.call();
        p.sendMessage();
        p.playGame();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值