多态的应用-继承多态-接口多态
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
当这个作为参数的父类是普通类或者抽象类时,构成继承多态
当这个父作为参数的父类是一个接口时,构成接口多态
多态作为形参
形式参数
基本类型(前面讲过,不解释)
引用类型
普通类
当一个形参希望我们传入的是一个普通类时,我们实际上传入的是该类的对象/匿名对象
抽象类
当一个形参希望我们传入的是一个抽象类时,我们实际上传入的是该类的子类对象/子类匿名对象
接口
当一个形参希望我们传入的是一个接口时,我们实际上传入的是该类的实现类对象/实现类匿名对象
多态作为返回值
返回值类型
基本类型(前面讲过,不解释)
引用类型
普通类
当一个方法的返回值是一个普通的类时,实际上返回的是该类的对象,我们可以使用该类的对象接收
抽象类
当一个方法的返回值是一个抽象类时,实际上返回的是该抽象类的子类对象,我们可以使用该抽象类接收
接口
当一个方法的返回值是一个接口时,实际上返回的是该接口的实现类对象,我们可以使用接口接收
当方法的返回值类型是引用类型的时候,可以使用链式调用
内部类
提高类类的安全性
内部类的概念
将类定义在类的内部,那么该类就成为内部类
注意: 内部类是一个相对的概念,如果A类中有一个B类,那么A类相对于B类来说就是外部类,那么B类相对于A类来说就是内部类
内部的分类
1.成员内部类
2.局部内部类
3.静态内部类
4.匿名内部类
内部类的特点:
1.内部类可以直接访问外部类的所有成员
2.外部类如果需要访问内部类成员,必须创建内部类对象
3.内部类如果编译后生成2个字节码文件,格式如下
外部类$内部类.class
OuterClass$InnerClass.class
4.要访问内部类的成员非常麻烦,而且造成程序耦合性增高,可读性降低,所以内部类要慎用
成员内部类
成员内部类
掌握如何访问成员内部类的成员
格式:
外部类类名.内部类类名 对象名 = 外部类对象.内部类对象
Version:1.0StartHTML:0000000105EndHTML:0000013647StartFragment:0000000127EndFragment:0000013629
public class InnerClassDemo03 {
public static void main(String[] args) {
OuterClass3.InnerClass oi = new OuterClass3().new InnerClass();
oi.show();
oi.setNum2(100);
System.out.println(oi.getNum2());
}
}
class OuterClass3{
// 成员位置
private int num = 10;
class InnerClass{
private int num2 = 20;
public void show() {
System.out.println(num);
System.out.println(num2);
}
public void setNum2(int num2) {
this.num2 = num2;
}
public int getNum2() {
return this.num2;
}
}
}