0
点赞
收藏
分享

微信扫一扫

Day_08 面向对象第二重点继承和一些关键字

云上笔记 2022-01-17 阅读 12

static 关键字

static : adj. 静态的

static 可以修饰成员变量和成员方法;

    static 修饰的成员具备的特点:
        1.static修饰的成员被所有对象共享
        2.static修饰的成员能被类名直接调用
        3.static修饰的成员优先于对象加载的
        4.static修饰的成员随着类的加载而加载的

静态成员内存图

请添加图片描述

静态成员的访问问题

非静态成员变量非静态成员方法静态成员变量静态成员方法
非静态成员方法
静态成员方法XX

工具类的自定义

工具类 : Arrays,Math,System,Collections....
    
工具类的编写步骤:
	1. 定义一个类,名称 XxxxUtils --> Xxxx操作的事物
	2. 私有无参构造方法,并不提供其他任何构造方法 -> 不允许程序员创建对象
		//dont let anyone instance this class!
	3. 把所有的成员变量和成员方法都static修饰	

继承

继承 : 继承在Java中表示的是 类与类之间的关系 (类和类之间只有继承关系)
    
继承特性中最重要的几个特点:
	1. 子类继承父类可以使用父类所有的非私有的成员 -> 父爱如山
	2. 子类要加载优先加载父类 
	3. 一个子类只可以有一个父类(Java继承的单一继承)
       一个父类可以有多个子类;
       父类还可以有自己的父类(多层继承)
    4. 父类对象不可以使用子类中的成员 -> 父亲是渣男       

继承的格式

继承的格式 是定义在子类的类声明上;

关键字 : extends
    
格式:
	//当一个类没有写任何继承格式,那么这个类就默认继承Object
    public class 父类名 /*extends Object*/{//Java中所有都类都直接或者间接的继承于Object

    }
    public class 子类名 extends 父类名{//继承关系

    }

Object :  超类,根类,基类
	是所有类直接或者间接的父类; // 炎黄大帝

继承关系下成员访问的特点

成员变量的访问特点
    继承关系下成员变量的访问特点: 就近原则
        1. 在父类中访问 :  只能访问父类中有的成员变量,子类的访问不到
        2. 在子类中访问 : 可以访问子类自己的和父类所有非私有的成员
             特点: 遵循变量访问的就近原则
                局部位置 < 本类成员 < 本类父类成员
             this: 打破局部的约束,强制访问本类成员位置上的变量
             super:打破本类成员的约束,强制访问本类父类成员位置上的变量
        3. 在第三方类中访问 : 子类对象只能访问父类所有非私有的成员和自己本类中的成员
成员方法的访问特点
    继承关系下成员方法的访问特点: 真正对象是哪个,就调用哪个对象的方法
        1. 在父类中访问: 父类不能访问子类成员
        2. 在子类中访问: 子类可以使用父类所有非私有的成员
            若想强制访问本类父类同名方法,需要在方法调用的前面加super : super.方法名();
        3. 在第三方类中访问:
                子类调用和父类同名的方法时,优先调用子类自己的

构造方法的访问特点

子类对象要加载优先加载父类!!!
    
    1. 每一个构造方法的第一句都隐藏着 super();
        super(): 调用父类的无参构造
    2. super()类似语句必须是构造方法的第一句有效代码
    3. 一个构造方法内只可以使用一次super()类似代码
    4. 除了有super()之外还有super(实参),this(),this(实参)
        super():调用本类父类无参构造
        super(实参): 调用本类父类有参构造
        this():调用本类的无参构造
        this(实参):调用本类的有参构造
    5. 如果说你使用了 super(实参) ,this()  ,this(实参)中的任何一个,默认赠送的super()就不送
    6. 在子类的构造方法中调用其他构造方法,必须有一个构造中是去加载父类!!

方法的重写 Override

    为什么有方法的重写:
        当父类行为的方法体不能满足子类的使用,可以在子类中重写父类的方法,覆盖父类方法的方法体;

    方法重写的特点:
        1. 必须有继承/实现关系
        2. 子类方法和父类方法的声明完全一致(99.99%)
            方法名必须一致
            形参列表必须一致
        3. 方法体可以不一样
        ------------
        重写中子类方法可以不一样的东西:
        1. 权限修饰符 :  子类的重写方法权限修饰符必须大于等于父类的方法
                public > protected > 不写 > private
        2. 返回值类型
            void : 必须一样
            基本数据类型 : 必须一样
            引用数据类型 : 子类重写方法的返回值类型必须是父类方法的子类或者同类
                Integer < Number < Object

       注解: @Override 可以用来约束重写方法的格式
            加在子类重写方法声明上

       static 修饰的方法没有重写的概念!

this 和 super

this : 本类对象的引用
	哪个对象调用含有this的方法,this就代表那个对象 --> 对象调方法: 对象照镜子,镜子里是谁this就是谁
	
super : 本类父类对象的引用	
	哪个对象调用含有super的方法,super就代表那个对象的某个父类对象 -> 对象调方法 : 对象照镜子,镜子里出现的是此对象的某个父类对象,而这个父类对象就是super
	
-------------------------以上是关于superthis关键字的理解---------------------------
        
 this.变量 : 打破局部约束,强制访问本类成员位置的变量
 this.方法(实际参数) : 调用本类成员位置的方法 -> 不会写!!所有的方法都是成员方法
 this() : 调用本类的无参构造方法
 this(实际参数) : 调用本类的有参构造方法
 
 super.变量 : 打破本类成员的约束,强制访问本类父类成员位置上的变量
 super.方法名(实际参数) : 调用本类父类的成员方法 -> 会用!!
 super() : 调用本类父类的无参构造方法 -> 构造方法的默认第一句代码
 super(实际参数) :  调用本类父类的有参构造方法

九阳神功

你只要看到了有对象调,就可以使用公式;

第一式 : 只要看到了对象调,找到对象创建的位置(观察对象创建的语句)
    
第二式 : 看对象在调什么:
	对象调属性(成员变量):
	对象调方法(成员方法):
	对象调静态成员(静态成员变量和静态成员方法):

// 类名 对象名 = new 类名(实参);
// 左边 : 左边的类名  -> 看左边: 左边的类中有没有这个东西 -> 有就不报错 没有就代码报错
// 右边 : 右边的类名  -> 看右边: 右边的类中有没有这个东西 -> 有的话结果就是这个,没有就去父类找

第三式 : 
	对象调属性(成员变量): 编译看左边,运行看左边;
	对象调方法(成员方法): 编译看左边,运行看右边;
	对象调静态成员(静态成员变量和静态成员方法): 编译看左边,运行看左边;

继承思想的好处和弊端

继承的好处:
	子类往父类看 : 抽取共性到父类中,提高代码的复用性
	父类往子类看 : 子类父类后,可能功能得到拓展
	
继承的弊端:	//写代码的六字箴言: 高内聚,低耦合
	内聚 : 独立完成功能的能力
	耦合 : 和别人的联系和关系 -> 依赖关系
	
	继承缺提高了代码的耦合性!
        
        继承的利大于弊!!有继承果断用!!
举报

相关推荐

0 条评论