4. 面向对象三个特性——多态

多态

  • 同一方法可以根据发送对象的不同而采用多种不同的行为方式。

  • 一个对象的实际类型是确定的,但指向对象的引用类型就有很多。

public static void main(String[] args) {

   //一个对象的实例类型是确定的
   //new Student();
   //new Person();
   //可以指向引用的类型就不确定了;父类指向子类。
   //子类重写了父类的方法,执行的是子类中的方法。
   //父类不可以调用子类独有的方法
   //父类能执行那些方法,主要看左边的类型

   //Student 能调用的方法都是自己的 或者 是继承的父类的
   Student s1 = new Student();
   //Person 父类型:可以指向子类,但是不能调用子类独有的方法
   Person s2 = new Student();
   Object s3 = new Student();

   s1.run();
   s1.eat();
   s2.run();//子类重写了父类的方法,执行子类的方法
}
-----------
son
eat
son
public class Person {

   public void run(){
       System.out.println("run");
  }
}
public class Student extends Person {

   public void run(){
       System.out.println("son");
  }

   //子类独有方法
   public void eat(){
       System.out.println("eat");
  }
}

 

 

  • 多态存在的条件

    • 有继承关系

    • 子类重写父类方法

    • 父类引用指向子类对象

  • 注意:多态是方法的多态,属性没有多态

  • instanceof(类型转换)引用类型

    System.out.println(X instanceof Y);
    判断 X Y 之间是否存在继承关系(父子关系),
    如果存在,则为 true,否则为false

类的类型转换:低转高——>直接转换;

高转低——>强制转换:可能会丢失一些父类中的方法

static关键字

private static String name;//静态属性
private int age;//非静态属性

public static void main(String[] args) {
   System.out.println(Person.name);
   Person person = new Person();
   System.out.println(person.age);
}
静态属性:可以在方法中直接调用,或使用(类名.属性名)的方式直接调用;
非静态属性:不可以直接调用,需要创建实例对象,然后使用(对象名.属性名)的方式调用。
//非静态方法
public void test1(){
   test2();
}

//静态方法
public static void test2(){

}

public static void main(String[] args) {
   test2();
}
非静态方法可以调用静态方法,而静态方法却不可以调用非静态方法,因为静态方法是随着类加载而加载的。
package com.demo05;

public class Person {

   //动态代码块 —— 2:次之
  {
       System.out.println("非静态代码块");
  }

   //静态代码块 —— 1:最先执行,切只执行一次
   static {
       System.out.println("静态代码块");
  }

   //构造方法 —— 最后
   public Person() {
       System.out.println("构造方法");
  }

   public static void main(String[] args) {
       Person person = new Person();
       System.out.println("-----------");
       Person person1 = new Person();
  }
}

静态代码块
非静态代码块
构造方法
-----------
非静态代码块
构造方法

静态导包

package com.demo05;

//静态导包
import static java.lang.Math.random;
import static java.lang.Math.PI;

public class Student {
   public static void main(String[] args) {
       System.out.println(random());
       System.out.println(PI);
  }
}

 

posted @ 2021-03-11 00:29  初夏_雨露  阅读(58)  评论(0)    收藏  举报