多态的应用、内部类

多态的应用

那么我们先来回顾一下,什么是多态

多态:父类的引用指向子类的示例

多态的实现方法

1.使用父类作为方法的形参实现多态

2.使用父类作为方法的返回值

继承多态:这个作为参数的父类最普通类或者抽象类时

接口多态:当这个作为参数的父类是一个接口时,构成接口多态

多态作为形参

基本数据类型

基本数据类型作为形参,就是我们讲的值传递

引用类型

普通类

抽象类

接口

多态作为返回值

基本数据类型

基本数据类型作为返回值,就是我们讲的值传递 ,这块没有什么区别,也不涉及多态

引用类型

普通类

抽象类

接口

public class Pet {
    private String petName;     //宠物名
    private char gender;
    private int age;

    //功能
    //都会跑
    public void run() {
        System.out.println(petName + "在跑.....");
    }

    //都会叫
    public void bark() {
        System.out.println(petName + "在叫.....");
    }
}

在创建一个子类继承

public class Cat extends Pet {
    //有参构造
    public Cat(String petName, char gender, int age) {       
        super(petName, gender, age);
    }
    //无参构造
    public Cat() {
    }

    //子类重写父类的方法
    @Override
    public void run() {
        System.out.println(getPetName() + "走猫步......");
    }
    @Override
    public void bark() {
        System.out.println(getPetName() + "喵喵喵的叫.....");
    }
}

测试

 public static void main(String[] args) {
        Master zhuRen = new Master();
        Cat jiaFeiCat = new Cat("加菲猫", '女', 2);
        zhuRen.feed(jiaFeiCat);
    }
  }
}

我们来聊一下多态的使用场景

多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。

现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

内部类

我们先来了解一下什么是内部类

允许一个类的内部定义类,这样叫做内部类

内部类分为:

成员内部类

局部内部类

静态内部类

匿名内部类

成员内部类

在一个类中除了可以定义成员变量、成员方法,还可以定义类,这样的类被称作成员内部类。

允许在一个类的内部定义类,这样的类称作内部类

格式:

Class 外部类{

 Class 内部类{

  } 

}

特点:

内部类可以直接访问外部类的成员,包括私有成员。

外部类要访问内部类的成员必须要建立内部类的对象

案例:

public class Hello {
class aa{

}
}

局部内部类:

定义在某个局部范围中的类,其有效范围只限于方法内部。

例子:

public class Hello {
public void aa(){
System.out.println("外部类");
}

public void aaa(){
class a{
public void inner(){
System.out.println("内部类");
}
}
}

}

 

只需要创建外部类对象,调用所属方法即可访问局部内部类!

 

静态内部类:

使用static关键字修饰的成员内部类

静态内部类中只能访问外部类的静态成员,同时通过外部类访问静态内部类成员时,可以跳过外部类从而直接通过内部类访问静态内部类成员。

格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();

案例:

 

 

 

匿名内部类:匿名内部类其实就是没有名称的内部类。

他起到一个接口的实现类作为方法参数传入,而是直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现的作用

格式:

 

 

案例:

 

posted @ 2022-06-19 16:35  一位程序袁  阅读(37)  评论(0编辑  收藏  举报