20200929冯强

学习总结:

1.多态

一个特定类型的变量,可以引用多个不同类型的对象,并且能自动调用引用对象的方法。也就是说根据引用对象的不同,响应不同的操作。

1.1多态分类

1.编译时多态

重载: 在编译时就体现出了多态的特征 重点是方法的不同体现

2.运行时多态

继承 父类类型具有子类特征

Pet pet = new Dog();//向上转型

重写是多态的基础

class Pet{
    public void say(){
        System.out.println("动物说什么");
    }
}
class Dog extends Pet{
   public void say(){
        System.out.println("狗说话");
    }  
}
//调用pet.say();为子类狗的方法
pet.say();

//当用的是子类的方法而父类没有时 要向下转型
if(pet instanceof Dog)
pet = (Dog) pet;
2.1实现多态的条件

要有继承关系

父类引用指向子类对象(向上转型)

子类要重写父类的方法

2.2多态的应用

可替换性

可扩充性

接口性

灵活性

简化性

2.3 以父类类型作为方法的参数
public void toHost(Pet pet) { 
    System.out.print("主人带"); 
    pet.toHospital();
}//调用的还是子类的
2.4多态的使用
  1. 接口

  2. 重写

  3. 抽象类方法

调用实例方法时看 new的对象 是什么

调用静态方式时看 左边类型是什么就是什么

2.抽象类

//抽象类为了让多态时不调用父类的实例方法
//抽象类中可以有实例方法 也可以有抽象方法
//抽象类不能实例化对象
//抽象类的抽象方法必须实现 抽象方法不能用 private 修饰
//抽象方法由 abstract 修饰抽象类 
//类方法( static )不能声明为抽象( abstract )方法
//一个类中只要含有抽象方法,这个类就必须是抽象类;抽象类不一定含有抽象方法
public abstract class Pet { 
    //抽象方法 
    public abstract void toHospital();
}

3.接口

约定好规范,然后按照规范来做。接口就是定义规范。java 中的接口作用和生活中类似,它提供一种约定,使实现接口的类在形式上保持一致。抽象类中可以有普通方法而接口中的方法都是抽象的,也可以说接口是一个特殊的 抽象类 ,接口不能被实例化,而且没有构造方法

public interface USBInterface { 
    public static final String NAME = "";//静态常量 默认 public static final      
    public void service();//默认public abstract
}


//实现多个接口
public class Computer implements USBInterface, ChargeInterface
 //接口继承多个接口
public class LenovoComputer extends Computer implements USBInterface

4.jdk8接口新特性

在 jdk8.0 中 default 关键字可用于在接口中修饰方法(默认方法), default 修饰的方法可以有具体

实现,也只能在接口中出现。 default 修饰的方法可以被重写。

public default void test() { 
    service(); 
    System.out.println("service test");
}

接口中还可以有 static 修饰的方法,称为静态方法(类方法)。类方法可以直接使用接口名.方法名调

用。

public interface USBInterface {
    public static void test1()  { 
        System.out.println("test1"); 
    } 
}

存在的问题:

抽象类中为什么会有构造方法 不是不能实例化对象吗 就算有那么构造器也应该私有啊

public abstract class Test {
    public Test() {
        
    }
    public abstract void Test();
}

 class Test2 extends Test{
    public  void Test() {
        System.out.println("!");
    }
}

评论

this is is footer