2021-05-14

面向对象总结

 

重写: 子类重写父类的方法,子类继承了父类的方法,然后重新写了一个跟父类一模一样的方法

方法重写: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出来的对象。(理解不是很准确)

一个类可以实现多个接口,也可以继承多个接口。

接口与类的关系是实现,接口与接口的关系是继承。抽象类与类的关系是实现,类与类的关系是继承。

 

总结:接口多态这块我是听到不好,刚开始听不懂的,上课也是懵逼的,今天慢慢的开始理解了一点,在周末争取拿下。

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值