面向对象进阶

目录

1.static

(1)静态变量

(2)静态方法

(3)static注意事项

2.继承

(1)什么是继承?继承的好处

(2)继承的特点

(3)子类可以继承父类的哪些内容

(4)继承中成员变量与成员方法的的访问特点

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

(6)this super 使用总结

3.多态 

(1)多态的基本认识

(2)多态调用成员的特点

(3)多态的优势和弊端

1.static
(1)静态变量

60540aa56ec443c4a353e34079a954ca.png

5622b2dd7f5e4d558cd0dcd18acb7a1c.png

public class staticDemo1 {
    private String name;
    private  int age;
    private  String gender;
   public static  String teachername;
    public staticDemo1() {
    }

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

    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 String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }
    public  void study(){
        System.out.println(name+"正在学习");
    }
    public  void show(){
        System.out.println(name+","+age+","+gender+","+teachername);
    }
}

public class staticDemo1Test {
    public static void main(String[] args) {
        staticDemo1.teachername = "阿伟老师";
        staticDemo1 s1 = new staticDemo1();
        staticDemo1 s2 = new staticDemo1();
        s1.setName("张三");
        s1.setAge(18);
        s1.setGender("女");

        s1.study();
        s1.show();
       System.out.println("-------------");
        s2.setName("李四");
        s2.setAge(20);
        s2.setGender("女");

        s2.study();
        s2.show();
    }
}

dca78b37945f487ab5f6338889656d96.png

静态变量是随着类的加载而加载的,优先于对象的出现;

28bda767cf2b44bab9a22623c3267201.png

(2)静态方法

public class ArrayUtil {
    //    私有化构造方法
//    目的:不让外界创建他的对象
    private ArrayUtil() {
    }

    //需要定义为静态的方法调用
    public static String printArr(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append((arr[i]));
            } else {
                sb.append(arr[i]).append(",");
            }
        }
        sb.append("]");
        return sb.toString();
    }
    public static double getAverage(double[] arr){
        double sum = 0;
        for (int i = 0; i < arr.length ; i++) {
            sum = sum+arr[i];
        }
        return sum/arr.length;
    }
}
public class ArrayUtilTest {
    public static void main(String[] args) {
//        测试两个工具类的方法是否成功
        int[] arr1 = {1,2,3,4,5};
        String str = ArrayUtil.printArr(arr1);
        System.out.println(str);


        double[] arr2 ={1.5,3.7,4.9,5.8,6.6};
        double avg = ArrayUtil.getAverage(arr2);
        System.out.println(avg);
    }
}
(3)static注意事项

2.继承
(1)什么是继承?继承的好处

(2)继承的特点

package Demo1;

public class Animal {
    public void eat(){
        System.out.println("在吃东西");
    }
    public void drank(){
        System.out.println("在喝水");
    }
}

package Demo1;

public class cat extends Animal{
    public void catchMouse(){
        System.out.println("猫在抓老鼠");
    }
}
package Demo1;

public class buOu extends cat{

}
package Demo1;

public class Husky extends dog{

    public void breakHome(){
        System.out.println("在拆家");
    }
}
package Demo1;

public class Test {
    public static void main(String[] args) {
//        创建对象并调用方法

//        1.创建布偶猫的对象
        buOu rd = new buOu();
        rd.eat();
        rd.catchMouse();
        rd.drank();
      System.out.println("-----------------");
//        2.创建哈士奇的对象
        Husky h = new Husky();
        h.breakHome();
        h.drank();
        h.eat();
    }
}

 

(3)子类可以继承父类的哪些内容

 子类中的所有成员变量都可以继承下来,但是被private修饰的成员变量不能被直接调用,需要javabean

虚方法:不被final,private,static等修饰的方法

(4)继承中成员变量与成员方法的的访问特点

成员变量:

成员方法:

package Demo2;

public class Dogs {
    public void eat(){
        System.out.println("狗在吃狗粮");
    }
    public void lookHome(){
        System.out.println("狗在看家");
    }
}





public class Husky extends Dogs {
    public void breakhome(){
        System.out.println("哈士奇在拆家");
    }
}


public class ChineseDog extends Dogs {
    //    父类中的方法不能满足我们的需求了,所以需要进行重写
//    而且中华田园犬完全用不到父类中的代码,所以不需要通过super进行调用
    public void eat(){
        System.out.println("吃剩饭");
    }
}




public class SharPi extends Dogs {
//    因为沙皮狗吃的狗粮和骨头
//    父类中的方法不能满足我们的需求了,所以需要进行重写
    @Override
    public void eat(){
    super.eat();
//    调用父类的eat:吃狗粮
        System.out.println("狗啃骨头");
    }
}


public class Test {
    public static void main(String[] args) {
        Husky h = new Husky();
        h.eat();
        h.breakhome();
        h.lookHome();

        ChineseDog c = new ChineseDog();
        c.eat();
        c.lookHome();

    }
}



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

父类中的构造方法不会被子类继承

(6)this super 使用总结

public class students {
    private  String name;
    private   int age;
    private  String bj;
    private  String num;

    public students() {
//        需求:默认为18岁
        this(null,18,null,null);
        System.out.println("我是学生"+age+"岁了");
    }

package Demo3;

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

    public Employee() {
    }

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

    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 double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
    public void work(){
        System.out.println("员工在工作");
    }
    public void eat(){
        System.out.println("在吃饭");
    }
}
package Demo3;

public class Manager extends Employee{
    private  double bouns;
//空参构造
    public Manager() {

    }
//带全部参数的构造
// 父类加子类
    public Manager(String id, String name, double salary, double bouns) {
        super(id, name, salary);
        this.bouns = bouns;
    }

    public double getBouns() {
        return bouns;
    }

    public void setBouns(double bouns) {
        this.bouns = bouns;
    }
    @Override
    public void work(){
      System.out.println("管理其他人");
    }
}
package Demo3;

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

    public Cook(String id, String name, double salary) {
        super(id, name, salary);
    }
    @Override
    public void work(){
        System.out.println("厨师正在炒菜");
    }
}

package Demo3;

public class Test {
    public static void main(String[] args) {
        //    创建对象,并赋值调用
        Manager m = new Manager("heima001","张三",14888,5000);
        System.out.println(m.getId()+","+m.getName()+","+m.getSalary()+","+m.getBouns());
        m.work();
        m.eat();
System.out.println("---------------------");

        Cook c = new Cook();
        c.setId("heima002");
        c.setName("李四");
        c.setSalary(6999);
        System.out.println(c.getId()+","+c.getName()+","+c.getSalary());
        c.work();
        c.eat();
    }


}
3.多态 
(1)多态的基本认识

如果没有多态:

代码重复累赘 

有了多态后:

package Demo1;

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

    public Person() {
    }

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

    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 void  show(){
        System.out.println(name+","+age);
    }
}
package Demo1;

public class Student extends Person{

    @Override
    public void show(){
        System.out.println("学生的信息为:"+getName()+","+getAge()+"岁。");
    }

}

package Demo1;

public class Teacher extends Person{
    @Override
    public void show(){
        System.out.println("老师的信息为:"+getName()+","+getAge()+"岁。");
    }
}
package Demo1;

public class Administrator extends Person{
    @Override
    public void show(){
        System.out.println("管理员的信息为:"+getName()+","+getAge()+"岁。");
    }
}
package Demo1;

public class Test {
    public static void main(String[] args) {
//        创建三个对象,并调用register方法
        Student s = new Student();
        s.setAge(18);
        s.setName("张三");

        Teacher t = new Teacher();
        t.setAge(34);
        t.setName("李四");

        Administrator a = new Administrator();
        a.setAge(48);
        a.setName("王五");

        register(s);
        register(t);
        register(a);


    }
//这个方法既可以接收老师,学生还可以接收管理人员的信息
//只能把参数写成这三个类型的父类

    public static void register(Person p){
        p.show();
    }
}

(2)多态调用成员的特点

(3)多态的优势和弊端

instanceof:表示判断,变量a是不是属于Dog类型,若不是,if语句则将转其Dog类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值