封装(private):把对象的属性私有化
private可以修饰属性,方法,被私有化的成员只能在本类中访问
好处:
- 提高安全性
- 提高重用性
继承(extend)
特点:
- 使用extends关键字来表示继承关系
- 相当于子类把父类的功能复制了一份
- Java只支持单继承
- 继承可以传递
- 父类的私有成员由于私有限制访问,所以子类不能使用父类的私有资源
- 继承多用于功能的修改,子类可以在拥有父类功能的同时,进行功能拓展
- 像是is a的关系
多态(继承+重写)
父类引用指向子类对象(子类对象的地址值交给父类类型的引用变量来保存)
编译看左边,运行看右边
多态中成员变量使用的是父类的,方法的定义使用父类,实现(方法体)使用的是子类的。
多态中父子类都有静态方法,不是重写的现象,所以调用的还是父类的功能
内部类
内部类有:成员内部类和局部内部类
成员内部类在类里方法外,局部内部类在方法里
成员内部类
成员内部类的格式:class Animal{
class Cat{}
}
特点:
1) 内部类可以直接访问外部类中的成员,包括私有成员
2) 外部类要访问内部类的成员,必须要建立内部类的对象
3) 在成员位置的内部类是成员内部类
4) 在局部位置的内部类是局部内部类
class Outer{ String name; private int age; public void find(){ System.out.println("我是外部类的find方法"); } class Inner{ int sum =10; public void delete(){ System.out.println("我是成员内部类的delete方法"); } } }
new 外部类.方法名()--->匿名对象 只能够用一次调用方法
“匿名对象”就是没有名字的对象,匿名对象只能够使用一次
创建内部类对象 :外部类名.内部类名 对象名=new 外部类名().new 内部类名()
Outer.Inner io=new Outer().new Inner();
内部类可以使用外部类的资源,私有资源也可以
外部类无法直接使用内部类资源,外部类想使用类部资源,需要在外部类中的方法中创建内部类的对象,通过内部类对象调用内部类的资源
来回调用会出现 StackOverFlowException 栈溢出异常
被private修饰
格式:class Animal{
private class Cat{}
}
成员内部类被Private修饰以后,无法被外界直接创建创建对象使用,在外部类方法中创建对象,调用它的方法
所以可以创建外部类对象,通过外部类对象间接访问内部类的资源
被static修饰
格式:class Animal{
static class Cat{}
}
代码样式
public static void main(String[] args) { Outer2.Inter2 io2=new Outer2.Inter2(); io2.show(); new Outer2.Inter2().show();//匿名对象创建内部类,并调用内部类方法 Outer2.Inter2.fly();//链式加载 } } class Outer2{ static class Inter2{ public void show(){ System.out.println("我是静态内部类的普通方法"); } public static void fly(){ System.out.println("我是静态内部类的静态方法"); } } }
外部类作为内部类的特殊成员,需要设置成静态,才能在静态内部类中添加静态方法
静态资源访问时不需要创建对象,可以通过类名直接访问
访问静态类中的静态资源可以通过”. . . ”链式加载的方式访问
局部内部类
格式:class Animal{
public void eat(){
class Cat{}
}}
在外部类的方法中创建内部类对象进行调用方法后,内部类的功能才会被调用
匿名内部类
定义:new 类名(){方法实现}.方法名;
new Iuter4()创建匿名对象 {方法实现} 接口的实现类 .save()表示匿名对象调用实现后的方法
匿名内部类属于局部内部类,而且是没有名字的局部内部类,通常和匿名对象一起使用
匿名内部类通常与匿名对象结合一起使用,匿名对象只能使用一次,一次只能调用一个方法
抽象类
普通类