面向对象深入部分
一:继承
子类继承了父类,拥有了父类的一切(但你未必全能用)
对象 instance of 类
override 三大原则:
1.方法名 参数列表相同
2.返回值类型和异常类型 子类要小于父类
3.返回权限 子类要大于父类
object类是所有类的父类,最核心基础的类,所有类都是object
打印一个对象其实是调对象的tostring方法,没实现tostring就用object的tostring。
== 判断值是否相同 对象则判断地址是否相同
equal判断对象是否相同 一般需要重写(比如人这个类 身份证相同就是同一个对象),没重写时 this == obj也是用等于判断
**String类型已经帮我们写了equal方法 ==判断是否是一个对象 equal判断字符串内容是否相同 *
JDK给我们提供的一些类,大都重写了equal供我们调用
构造方法与静态初始化快的调用顺序都是先调用父类的 最后才调用自己的
二:封装
程序设计核心:高内聚 低耦合
java中的访问控制符权限
java bean 规则:
1.属性通常都private
2.对外暴露set get 方法,在set get里就可以做属性控制了。
3.方法一般public即可
三:多态
同一个方法 调用的对象不同,产生的行为可能不同(方法的多态)
多态的条件:
1.继承
class Animal{
void shot(){
System.out.println("动物叫了一声");
}
}
class Dog extends Animal{
@Override
void shot(){
System.out.println("狗叫了一声");
}
}
class Cat extends Animal{
@Override
void shot(){
System.out.println("猫叫了一声");
}
}
2.重写
@Override
void shot(){
System.out.println("猫叫了一声");
}
##重写shout方法
3.父类引用指向子类对象
static void AnimalCry(Animal a){
a.shot();
}
##父类animal的引用a ,调用时是子类具体对象 cat dog的shot方法
从dog,cat转成animal是向上转型 可以自动发生 向下转型需要强制转型。
四:final修饰符
修饰变量 值不可变
修饰方法 不能重写
修饰类 不能继承
五:抽象类与抽象方法
1.包含抽象方法的类一定是抽象类
抽象方法有什么作用?
1.没有实现,子类继承时必须实现。
2.抽象类不能实例化
3.为子类提供统一的规范
六:接口
比抽象类更抽象
抽象类还可以有普通方法,接口里的全是abstract的
接口就是规范,定义了一组规则,如果你是,则必须能。。
接口可以多继承
接口不能定义变量
七:面向接口编程
八:内部类
(1)成员内部类
内部类里访问外部类的属性:Outer.this.age
内部类里访问自己的属性:this.age
外部类不能随便用内部类的东西
非静态
Outer.Inner inner = new Outer().new Inner(); //内部类对象依托于外部类的
静态
Outer.Inner inner = new Outer.Inner();
(2)匿名内部类
只使用一次