多态的应用、内部类
多态的应用
那么我们先来回顾一下,什么是多态
多态:父类的引用指向子类的示例
多态的实现方法:
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 外部类名.内部类名();
案例:
匿名内部类:匿名内部类其实就是没有名称的内部类。
他起到一个接口的实现类作为方法参数传入,而是直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现的作用
格式:
案例: