面向对象总结:
重写: 子类重写父类的方法,子类继承了父类的方法,然后重新写了一个跟父类一模一样的方法
方法重写:Override,Overwrite 方法重载:Overload 在同一个类中,方法名一样,参数列表不一样,个数,顺序,类型。
方法覆盖的条件:
1.有继承
2.与父类方法一样。只是方法体不一样。(返回值一样,参数列表一样,方法名一样) 暂时记住一样的返回类型。
3.访问权限的问题:子类重写父类的时候,重写的方法的访问权限不能低于父类的访问权限。
4.重写之后不能抛出比父类更多的异常,只能更少。 注意:与属性无关,重写只针对于方法。私有不能覆盖。
一.封装
封装的话自我理解就是用修饰符将事物隐藏或者公开,又或者说,将类成员私有化,外部人不能直接访问或者修改,然后提供一个类似于
接口的东西,然后通过接口再去访问它。降低了耦合度,也就是高内聚,低耦合的意思吧。
二.继承
1.Java的继承:
继承时,子类的访问权限不能低于父类的访问权限。 继承,子类内部可以访问父类除私有之外的成员。 通过子类对象名只能访问从父类继承过来的非私有的成员。 总结:私有的不能被继承
它所反映的是一般到特殊的关系。
2. Java继承的访问控制权限:
继承时,子类的访问权限不能低于父类的访问权限。 继承,子类内部可以访问父类除私有之外的成员。 通过子类对象名只能访问从父类继承过来的非私有的成员。 总结:私有的不能被继承
它所反映的是一般到特殊的关系。
我们该如何访问访问父类的成员?
(1)我们可以通过父类类名打点父类成员的方法。
(2)也可以通过子类类名打点父类成员的方法//这个自己验证的
(3)通过类名打点的方式访问都必须是静态的的。方法或者变量。
(4)也可以通过创建子类对象名的方法打点去访问父类的成员。
三.多态
1.多态,什么是多态?我的理解是用相同的方法实现不同的状态。
class Fu{ public void g(){ System.out.println("FFFFFFFFF"); } } class Zi extends Fu{ public void g(){ System.out.println("ZZZZZZZZZ"); } } class Test_1 { public static void main(String[] args) { Fu f = new Zi(); f.g(); } }
例如这段代码:首先f.g();这句话的意思是 f 是父类的引用。代表的是 父类 的地址。然后去调用了 g 方法。通过父类去调用子类的方法。
2.这句代码会分为两步去执行,在 jvm 中首先会识别它的父类有没有g这个方法,识别到了就会编译成功,然后去执行这个方法。如果编译器会发现父类的引用指向的是一个堆内存中的空间地址,也就是子类的地址,所以编译器会执行这个子类对象,在子类对象中去找g方法。然后执行g方法。也就是说编译时看左,运行时看右。
强制类型转换问题:
多态的强制类型转换:======向下转型。
例如:有两种方法:第一种是强制转换。向下转型。
第一种:就是new 一个子类的对象出来:这种的没有重新在堆中分配空间。
Fathar fathar = new Zi();
Son s2 = (son)fathar;
s2.play();
这种类型转换我起初的理解就是,将父类强制转换为子类,引用的时候依然还是用的子类在转换,子类调用子类的方法,没什么区别。
可能是由于太抽象了,所以理解有误解。它是将父类已经指向了子类,即代表子类对象的地址已经发送给了父类,此时再强制转换,就表示子类转换为子类当然可以转换过去。如果没有前面的父类引用子类,那么它就不会转换成功。
再来说说转换后调用的问题:把父类强制转换成子类,此时及再把强转后的父类地址发送给子类,这样就可以访问子类的特有的成员了。
Son s2 = new Son()
Son s2 .play();
第二种:这种方法是不是重新得在堆中分配一个空间,浪费内存。
四.抽象方法与抽象类
我对抽象方法的一些理解:
1.抽象方法没有方法体,抽象方法与类的关系是实现的关系
2.一个类中如果有抽象方法的存在那么这个类一定是抽象类。抽象类中可以有普通方法。但是抽象方法一定是在抽象类中。
3.抽象类的子类也可以是一个抽象类。(在某种情况下这样没意义因为无法实例化)
4.抽象方法的实现,往往都会让子类强制重写父类的方法。实现,这是它的本质。
五.接口
接口?很抽象的一个东西。
接口我们可以理解为为实现一些类本身没有的功能方法。接口也可以理解为一个抽象类,抽象的“父类”,而实现类 就是 “子类”。
这里注意this与super不能共同出现,static与this不能共存。
接口,接口是比多态还抽象的东西。实现接口的时候,必须子类重写或者说是子类继承它。然后实现它的方法,因为接口不能new对象。
接口也可以理解为继承中的父类的引用,子类实现类就是new出来的对象。(理解不是很准确)
一个类可以实现多个接口,也可以继承多个接口。
接口与类的关系是实现,接口与接口的关系是继承。抽象类与类的关系是实现,类与类的关系是继承。
总结:接口多态这块我是听到不好,刚开始听不懂的,上课也是懵逼的,今天慢慢的开始理解了一点,在周末争取拿下。