-
方法的多态
- 方法的重载
- 方法的重写
-
变量的多态
-
向上转型(自动类型转换)
父类声明的变量,可以用来保存本身的对象,也可以用来保存子类的对象
注意:
该变量不可以访问子类扩展的属性和方法
该变量可以访问重写后的方法
-
向下转型(强制类型转换)
子类声明的变量,可以用来保存本的对象,也可以用来保存父类的对象
注意:先向上转型,然后才能使用向下转型
-
-
如果一个方法的方法体无法确定,可以把该方法定义为抽象方法
-
抽象方法没有方法体
-
格式:
[修饰符] abstract 返回值类型 方法名([参数列表]);
-
如果一个类中有抽象方法,则该类一定是抽象类
-
抽象类中可以没有抽象方法
-
抽象类 = 普通类 + 抽象方法
-
抽象类不可以实例化,但是可以用来声明对象,主要被继承
-
如果一个普通类来继承抽象类时,则必须重写其所有的抽象方法
-
如果一个抽象的类来继承抽象父类时,则可以不重写其抽象方法
方法的参数列表可以是对象
更加抽象的抽象类
只能放置 常量和 抽象方法
格式:public interface 接口名 { 类体 }
接口可以多继承接口
public interface 接口名 extends 接口1, 接口2, ... {}
类可以单继承父类,也可以多实现接口
public class 类名 extends 父类名 implements 接口1, 接口2, ... { }
单继承(类与类), 多实现(类与接口)
在一个类中,在重新定义一个类
-
成员内部类
public class 外部类名{ int a = 45; public void aa() { } public class 内部类名 { .... } }
-
内部类中不能使用 static 修饰
-
内部类中可以访问外部类的所有的属性和方法(包含 private)
-
外部类也可以访问内部类中的属性和方法,前提要先创建内部类的对象
-
当内部类的属性和方法与外部类的属性和方法重名时,可以使用
外部类名.this.属性名
来调用外部类的属性或方法 -
内部类在外面创建对象时,必须先创建外部类对象,然后才能在此基础上创建内部类
外部类名 外部类对象名 = new 外部类名(); 内部类名 内部类对象名 = 外部类对象名.new 内部类名();
-
-
静态内部类
public class 外部类 {
.....
static class 内部类名 {
......
}
}
静态内部类可以使用 static 修饰
静态内部类只可以访问外部类的静态的属性和方法
外部类的创建
内部类名 内部类对象 = new 外部类名.内部类名();
- 局部内部类
public class 外部类{
....
public void aa(){
class 内部类名{
....
}
}
}
局部内部类的作用于只可以在其定义的方法中
局部内部类不能使用修饰符修饰
-
匿名内部类
-
继承抽象的父类
-
先定义一个抽象的父类(father)
-
测试
public class Test { public static void main(String [] args) { Father fa = new Father() { 重写father中的抽象方法 }; } }
-
-
实现接口
-
先定义一个抽象的接口(FaInter)
-
测试
public class Test { public static void main(String [] args) { FaInter fa = new FaIter() { 重写FaInter接口中的抽象方法 }; } }
-
-