java之旅 (第八天) 封装 代码块 static关键字

封装:
    隐藏对象的属性与实现细节,仅    对外提供接口
继承:
    一个类直接使用另一个类的属    性和方法

继承:(子类对父类地址的引用)
    继承:一个类直接使用另一个类的属性和方法

    格式: class 子类名 extends 父类名{}
    (extends:延伸,扩展)
    
    好处:
    a.提高了代码的复用性
    b.提供了代码的可维护性
    c.让类于类之间产生了联系,同时也是多态的前提
    注:
    类于类之间产生了联系,其实也是继承的弊端:
    开发原则:高内聚、低耦合。
    内聚:自己能够独立完成功能的能力
    耦合:类于类之间的联系

    类的组成: 
        成员变量:
        成员方法:
        构造方法:
    注:
    a.子类中出现了和父类中名字不一样的成员变量,怎    么办?自己玩自己的
    b.子类当中出现和父类成员变量或者成员方法名一致    的时候,怎么办?
    查找顺序:(就近原则)
    a.先在子类的局部范围去查找,有就使用(局部)
    b.再去子类的成员位置去查找,有就使用(成员)
    c.再去父类的成员位置去查找,有就使用
    d.如果还找不到,那就是真的找不到了 报错
    
    访问父类的内容:
    有一个东西跟this很相似,this是访问的本对象。    有    个东西如果能够访问其父类,关键字叫做:super
    a.调用成员变量:
        this.成员变量  调用本类的成员变量
        super.成员变量 调用父类的成员变量
    b.调用构造方法(创建对象一定要经过构造方法)
        this();
        super();
    c.调用成员方法
        this.成员方法()
        super.成员方法()
    子类继承父类,在内存当中的走向(先创建父再子)
        1.加载所以的class进入内存(关联的才加载进          方法区)
        2.加载main方法
        3.因为main里面有创建对象(如果这个对象有父        类,则先加载父类内存结构)
        4.父类数据加载完毕,创建子类对象
        5.如果有使用super,那么就通过super关键字去        查找父类地址
    
    继承当中构造方法的关系:
    a.子类当中的所有的构造方法都会默认的访问父类的    无参构造
    b.因为子类继承了父类,很有可能需要使用到父类的    初始化数据,所以在子类初始化完成之前,必须向初    始化父类
    c.子类当中的任何的构造方法,默认第一句都是    super(); 必须在第一句(自己写只能放在第一    句 ,也可以写。super(有参构造))
    d.假如父类没有提供无参构造,那么子类应该会出现    什么样的问题?
           子类出现异常
     如何解决?
     a.你给父类加一个无参
     b.你可以显示的去调用父类的带参构造    (super("nihao"))
             
    注:
    this代表本类对象的引用
    super代表父类存储空间的标识引用(可以理解为父类    的引用,可以操作父类的成员方法)(在创建子类对象    时,系统默认产生一个父类对象)
    super()和this()都必须写在第一句。如果不是第一    句,    会报错 很有可能对父类数据进行多次初始化,    JVM不允许
    

    继承注意事项:
    a.Java只支持单根继承,不支持多根继承(只能一次    继承一个父类)
    b.Java支持多层继承(可以多次继承一个父类)
    c.子类只能继承父类的非私有方法和变量(成员)
    d.子类不能够继承父类的构造方法,但是因为需要继    承父类 所以需要先将父类的数据进行初始化,所以    是父类自己执行了构造
    e.不要为了部分功能而去使用继承(继承的体现关系    应该是一个"is a"的关系)
    f.子类不能继承父类的属性与方法(子类可以通过父    类的公有接口去访问父类的私有成员以及私有方法,    但那是封装的特性,不是真正的继承)
    举例:(错误 ,部分功能重叠不要用继承)
    class A{
            public void show1(){}
            public void show2(){}
            }
    class B{
            public void show2(){}
            public void show3(){}
            }

    我们发现了B出现了和A一样的代码功能,所以我们可    能会考虑使用继承关系
    class B extends A{
            public void show3(){}
            }
    其实这样不好,因为你这样不但有show2,还多个    show1
    而去show1并不是我们想要的
    
正确:
    继承的体现关系应该是一个"is a"的关系
        Person
            Student
            Teacher
        水果
            香蕉
            菠萝
            哈密瓜
        
对类的构造的过程举例:(无论怎样,先加载main)
    class X{
    Y b = new Y();
    X(){
        System.out.println("X");
    }
}

class Y{
    Y(){
        System.out.println("Y"); 
    }
}

public class Z extends X{
    Y y = new Y();
    Z(){
        System.out.println("Z");
    }
    public static void main(String[] args) {
        new Z(); 
    }
}
 

方法重载 与 方法重写:
    方法重载:本类当中的方法名一样,参数列表不同,与             返回值无关
    方法重写:子类当中出现了和父类方法声明一样的时候
    
    方法重写的应用:
    当子类需要使用父类的功能,但是父类的功能又不能    满足需求的时候,你就可以重写父类的方法
    如果你仍然想保留父类的部分功能,就在你的新功能    产生之前是使用super关键字先调用父类的方法


代码块:
    代码块:在Java当中,被{}括起来的就被称之为代码块

    根据其位置的不同,写法的不同,代码块可以分为:
    局部代码块:存在于局部变量,用于限定变量的声明周    期(方法内)
    构造代码块:在类中的成员位置,每次调用构造方法    前,都会执行构造代码块(方法外,类内)
    作用:可以将多个构造方法相同的属性进行归集,同样    可    以对多个数据进行初始化
    静态代码块:在类中成员的位置,用{}括起来,只不过    用static进行了修饰(方法外,类内)
    注:
    1.除了静态代码块在方法区内,其他有{}都在栈内    存    中
    2.局部代码块在栈内存,构造代码块也在栈内存,与    成员变量同名也不冲突(成员变量在堆内存里)
    3.在方法中使用代码块就不能与局部变量同名,因为    同在栈内存里
    4.在Java当中,代码块的执行顺序如何?
    静态代码块 --> 构造代码块 -->构造方法 --> 局部    代码块
    静态代码块:因为存在静态的共享区所以只有一个地    址,只执行一次
    构造代码块:每一次调用都会执行
    构造方法:每一次调用都会执行


static:
    一般使用在工具类型的方法中(工具类),不依赖于任    何对象的属性就可以完成功能的操作。

    static的特点:
        1.可以修饰成员变量和成员方法
        2.随着类的加载而加载
        3.优于对象的存在
        4.可以被类的所有对象共享
            
           在现实的开发当中,应该有哪一些数据应该被            共享?
                1.班级编号
                2.老师
        5.可以通过类名直接访问(设置为public)
            其实本身同样可以实现对象名进行调用
            一般推荐使用类名进行调用(以后凡是看到            某一东西,直接用类名点出来 肯定是被                static修饰了)
        注:格式为 public static
            如果为私有,不能通过类名访问

    static的注意事项:
        a.在静态方法当中不能出现this关键字
            如何理解:
        静态方法是随着类的加载而加载,this关键字是        随着对象的创建而存在
        静态是优先于对象的存在

        b.静态方法只能方法静态方法和静态的成员变量
            静态方法:
                成员变量:只能方法静态的成员变量
                成员方法:只能访问静态的成员方法
            非静态方法:
                成员变量:可以是静态的,也可以不是                静态的
                成员方法:可以是静态的,也可以不是                静态的

        一句话:静态只能访问静态,非静态 爱咋咋地。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值