面向对象(static\继承)

1.static

(1)static

   static表示静态,是Java中的一个修饰符,可以修饰成员方法,成员变量

(2)静态变量

 静态变量:被static修饰的成员变量,叫做静态变量

 1.特点

(1)被该类的所有对象共享

(2)静态属性不属于某一个对象,而是属于某个类

(3)静态变量随着类的加载而加载,是优先于对象存在

  2.调用方式

    类名调用、对象名调用

(3)静态方法

静态方法:被static修饰的成员方法,叫做静态方法

1.特点

(1)多用在测试类和工具类中

(2)Javabean类中很少会用

  2.调用方法

   类名调用、对象名调用

   3.拓展

          工具类:帮助我们做一些事情,但是不描述任何事物的类

          Javabean类:用来描述一类事物的类

          测试类:用来检查其他类是否书写正确,带有main方法的类,是程序的入口

(4)注意事项

  1.静态方法只能访问静态变量和静态方法

  2.非静态方法可以访问静态变量或者静态方法,也可以访问非静态的成员变量和非静态的成员方法

  3.静态方法中是没有this关键字

2.继承

(1)继承

      1.java中提供一个关键字extends,用这个关键字,我们可以让一个类和另一个类建立起继承关系。

例如:public class Student extends Person{}

Student称为子类(派生类),Person称为父类(基类或超类)

      2.当类与类之间,存在相同(共性)的内容,并满足子类是父类中的一种,就可以考虑使用继承,来优化代码

      3.可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码的复用性

     4.子类可以得到父类的属性和行为,子类可以使用

     5.子类可以在父类的基础上新增其他功能,让子类更强大

(2)特点

    1.Java只支持单继承,不支持多继承,但支持多层继承

    2.单继承:一个子类只能继承一个父类

    3.不支持多继承:子类不能同时继承多个父类

    4.多层继承:子类A可以继承父类B,父类B可以继承父类C。父类B是子类A的直接父类,父类C是子类A的间接父类

    5.每一个类都直接或者间接的继承于Object

    6.子类只能直接访问非私有的成员

(3)子类能继承的内容

     1.子类不能继承父类中的构造方法,但子类实例化时,子类会默认调用父类的无参构造方法,如果父类没有无参构造方法必须通过super关键字显示调用父类的有参构造方法

     2.子类可以直接继承和访问非私有的成员变量,子类不能直接访问父类的private成员变量,可以通过get和set方法间接访问和修改

     3.子类可以继承并直接调用父类中的非私有的成员方法,子类不能继承父类的private方法,因为私有方法的作用域仅在本类内部,子类可以继承父类的静态方法,但如果在子类中定义了与父类静态方法签名相同的方法,这不是重写而是隐藏,调用时会根据对象的声明类型来决定调用哪个方法

(4)成员变量的访问特点

     1.成员变量

       调用时,先从局部位置找,再从成员位置上找,最后从父类成员位置上找,逐级往上

       若出现重名的成员变量则

   System.out.println(name);        //从局部位置开始往上找
   System.out.println(this.name);   //从本类成员位置开始往上找
   Syetem.out.println(super.name);  //从父类成员位置开始往上找

    2.成员方法

   (1)方法的重写

      当父类的方法不能满足子类现在的需求时,需要进行方法重写,在继承体系中,子类出现了的父类中一模一样的方法声明,我们就称子类这个方法是重写的方法

   (2)@Override重写注释

     1.@Override是放在重写后的方法上,校验重写时语法是否正确

     2.加上注解后,会说明语法错误

   (3)方法重写的注意事项和要求

     1.重写方法的名称、形参列表必须与父类中的一致

     2.子类重写父类方法时,访问权限子类必须大于等于父类

     3.子类重写父类方法时,返回值类型必须小于等于父类

     4.重写方法时尽量和父类保持一致

     5.只有被添加到虚方法表中的方法才能被重写

   3.构造方法

  (1)子类中的构造方法不会被子类继承,但是可以通过super调用

  (2)子类中所有的构造方法默认先访问父类中的无参构造,在执行自己

  (3)子类再初始化的时候有可能会使用到父类中的数据,如果父类没有完成初始化,子类将无法使用父类的数据

  (4)子类初始化之前,一定调用父类构造方法先完成父类数据空间的初始化

  (5)子类构造方法的第一行语句默认都是:super( ),不写也存在,且必须再第一行

  (6)如果想调用父类有参构造,必须手动写super进行调用

 例:

无参构造

package a01inheriy;

public class Parent {
    public Parent() {
        System.out.println("父类的无参构造方法被调用");
    }
}
package a01inheriy;

public class Child extends Parent{
    public Child() {
        System.out.println("子类的构造方法被调用");
    }
}
package a01inheriy;

public class Main {
    public static void main(String[] args) {
        Child child = new Child();
    }
}
//输出结果:父类的无参构造方法被调用
//         子类的构造方法被调用

有参构造:

package a01inheriy;

public class Parent {
    private int x;

    //父类的有参构造方法
    public Parent(int x){
        this.x = x;
        System.out.println("父类的有参构造方法被调用, x = " + x);
    }
}
package a01inheriy;

public class Child extends Parent{

    //子类的构造方法
    public Child(int x) {
        //显示调用父类的有参构造方法
        super(x);
        System.out.println("子类的构造方法被调用");
    }
}
package a01inheriy;

public class Main {
    public static void main(String[] args) {
        Child child = new Child(10);
    }
}
//输出结果:父类的有参构造方法被调用, x = 10
//         子类的构造方法被调用

  (5)this和super

     1.this

    (1)理解为一个变量,表示当前调用者的地址值

    (2)访问成员变量:this.成员变量。访问本类的成员变量

    (3)访问成员方法:this.成员方法(...)。访问本类的成员方法

    (4)访问构造方法:this.(...)。访问本类的成员方法

     2.super

    (1)代表父类存储空间

    (2)访问成员变量:super.成员变量。访问父类的成员变量

    (3)访问成员方法:super.成员方法(...)。访问父类的成员方法

    (4)访问构造方法:super(...)。访问父类的构造方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值