java面向对象进阶

 

C++允许多继承,而java不允许多继承,但支持多层继承

 

继承结构创建对象时,会把父类的class文件也添加到方法区中,堆内存中开辟两个区域,一部分存放父类的成员变量,另一部分存放子类的成员变量。 创建对象的main方法出栈后,堆内存中的成员变量被回收。  

 子类可以继承父类的私有成员变量,但不能直接使用

子类只能继承父类的虚方法 (非final\private\static),形成一张虚方法表,在调用父类的方法是虚方法时,直接从子类的虚方法表中查找并调用,若调用的方法不是虚方法时,需要层层往上查找。

  

 

 this()访问本类构造方法一般用于赋予默认值使用。

 常用于以父类对象为参数传参,进而能方便的调用其子类重写的方法。

多态调用成员变量的特点:编译看左边,运行看左边。编译时看父类是否有该成员变量,若有则编译成功,否则直接编译失败。运行时,找父类中的成员变量,并打印出来。

不使用多态调用成员变量时,编译时首先到该类所在空间找该成员变量,若没找到,则去父类中寻找,找到则打印,否则报错。

多态调用成员方法的特点:编译看左边,运行看右边。编译时看父类中是否有该成员方法,若有则编译成功,否则直接编译失败。运行时,找子类是否对该方法重写,若有则打印该重写方法,否则打印父类中的方法。

1.eg

class Person {
    public void print() {
        System.out.println("1.我是人类!");
    }
}
class Student extends Person {
    public void print() {
        System.out.println("2.我是学生!");
    }
}
class Worker extends Person {
    public void print() {
        System.out.println("3.我是工人!");
    }
}
public class CanShuTongYiHua {
    public static void main(String[] args) {
        //Person per = new Student();
        WhoYouAre(new Student());
        //Person per = new Worker();
        WhoYouAre(new Worker());
    }
    public static void WhoYouAre(Person per) {
        per.print();
    } 
}

权限修饰符

 protected和public的区别:protected修饰的变量在两个类之间存在继承关系时可以使用,但不存在关系的无关类不能直接使用,而public在任何情况下都能直接使用。开发过程中一般将成员变量私有,将成员方法公有。

如果方法中的代码是抽取其他方法中共性代码,这个方法一般也私有。

代码块

局部代码块

通过{}来控制变量的生命周期。(已淘汰)

构造代码块(已淘汰,不够灵活)

静态代码块(初始化,防止变量被反复创建,减少内存占用)

抽象方法与抽象类

抽象类是对事物的抽象。

 抽象类虽然不能实例化,但可以用来给子类传参。

接口

接口是一种规则,是对行为的抽象。

  

  

 

 

 对于基本数据类型,浅克隆和深克隆的拷贝效果相同,对于引用数据类型,浅克隆没有申请新的地址空间,而是保存待拷贝对象的地址,即变量A、B指向同一地址空间。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值