Java基础之面向对象3

静态变量和成员变量有何区别

  • 存储位置

    静态变量在静态方法区中类所属的空间里,可以在主函数之前执行
    成员变量在堆内存中对象的所属空间里

  • 生命周期

    静态变量随着类(.class文件)的加载而存在,随着程序的结束而结束
    成员变量随着对象的创建而存在,随着对象的消亡而消失

  • 调用方式

    静态变量可以对象调用 类调用,静态变量也会有默认初始化
    成员变量只能对象调用

  • 别名

    静态变量属于类的 也叫类成员
    成员变量属于对象的 也叫对象特有属性

代码块

  • 静态代码块

    优先于主方法执行,优先于构造代码块执行,不管创建多少对象,静态代码块只执行一次,可用于给静态变量赋值,在类被加载之时,对类的内容进行一些初始化

  • 构造代码块

    随着对象的创建而执行

  • 局部代码块

    写在局部范围内的代码块,可以控制局部变量的生命周期

继承

  • 概念

    从代码上而言:在我们描述若干个类的时候,发现这些类中有大部分相同的成员,所以就可以把这部分重复的内容抽取出来,用另外一个类描述,新的类就是父类,其他的就是子类。

  • 继承的好处

    继承的出现提高了代码的复用性,提高软件开发效率。
    继承的出现让类与类之间产生了关系,提供了多态的前提。

  • java不支持多继承

    如果在一个子类继承的多个父类中拥有相同名字的实例变量,子类在引用变量时将产生歧义,无法判断应该使用哪个父类的变量

    如果在一个子类继承的多个父类中拥有相同方法,子类中有没有覆盖该方法,那么调用该方法时将产生歧义,无法判断应该调用哪个父类的方法

  • 子父类中成员变量的特点(同静态变量一样)

    父类中有(非私有) 子类中没有,访问父类的.
    父类中没有 子类中有,访问子类的.
    父类中有(非私有),子类中有,访问子类的.
    父类中有(非私有),子类有同名静态变量,访问子类静态的.
    当子父类中出现了同名成员函数,在子类中若要访问父类中的成员变量,必须使用关键字super来完成。
    注意:super和this的用法相似,this代表本类的对象引用,super代表父类内存空间,而不是父类的引用

  • 子父类中成员函数的特点(同静态函数一样)

    子父类当中存在重名函数,这种情况叫做函数的重写。
    子类重写函数的权限 至少大于等于父类函数(非私)的权限。
    静态只能覆盖静态,或者被静态覆盖,意思就是静态函数不存在重写。

  • 子父类中构造函数的特点

    父类的构造函数会优先于子类的构造函数运行,因为子类中所有构造函数的第一行有的默认的隐式super()语句。
    构造函数进栈第一句super(),完毕之后再显式初始化。
    对于super(参数列表)调用,前提是父类必须有相应的构造函数。

  • final关键字
    final修饰类不可以被继承,但时可以继承其他类
    final修饰的方法不可以被覆盖,但父类中没有被
    final修饰方法,子类覆盖后可以加final
    final修饰的变量称为常量,这些变量只能赋值一次,定义的时候必须有初始值
    final修饰的引用类型变量,表示该引用变量的引用不能变,而不是引用所指的对象中的数据还是可以变化的。

例如:

class ExtendsDemo05{
    public static void main(String[] args){
        Zi zi=new Zi();
        System.out.println(zi.num);//调用Zi的num
        System.out.println(Zi.num);//调用Zi的
        zi.show();//Zi重写了Fu的,所以打印的Zi的
    }
}
class Fu{
    static int num=10;
    public static void show(){
        System.out.println("Fu show....");
    }
}
class Zi extends Fu{
    static int num=20;
    static void show(){
        System.out.println("Zi show....");
    }
}
发布了49 篇原创文章 · 获赞 4 · 访问量 907

猜你喜欢

转载自blog.csdn.net/weixin_45404784/article/details/103376020