JavaSE进阶——day01

1.面向对象——继承

1.1-继承:让类与类之间产生关系,  子父类关系, 当建立起子父类关系后, 子类就可以直接使用父类中,  非私有的成员 (成员变量, 成员方法)

1.1.1使用继承前:

public class Coder{
        String name;  //姓名
        int age;      //年龄
        double salary;  //工资
}

public class Manager{
        String name;  //姓名
        int age;      //年龄
        double salary;  //工资
}

public class Hr{
        String name;  //姓名
        int age;      //年龄
        double salary;  //工资
}

1.1.2使用继承后:

public class Employee{
        String name;    //姓名
        int age;    //年龄
        double salary;    //工资
}

public class Coder extends Employee{

}

public class Manager extends Employee{

}

public class Hr extends Employee{

}

1.1.3继承的优缺点:

优点

1. 提高了代码的复用性
2. 提高了代码的可维护性
3. 是多态前提

 弊端:

代码的耦合性增强了

类与类的关系过于紧密

继承的使用场景:

当发现多个类之间存在共性内容 (相同的内容), 并且还产生了 is...a 的关系,  这时候就可以考虑使用继承来优化代码

1.2-继承中成员变量的访问特点

1.2.1思考 : 子父类中,  如果出现了重名的成员变量,  会优先使用谁的 ?

根据就近原则,  优先使用子类的

1.2.2思考 : 如果非要使用父类的成员,  使用那个关键字进行区分 ?

super

   JavaSE进阶——day01_第1张图片

1.3-继承中成员方法的访问特点

1.3.1思考 : 当子父类中,  出现了相同的成员方法 (方法名,  参数, 返回值), 在创建子类对象后, 调用方法,  会调用谁的逻辑?

子类方法逻辑,  但这不是就近原则,  是子类的方法对父类方法进行了重写

1.4-方法重写-Override

1.4.1介绍 :

在继承体系中,子类可以继承到父类的方法
但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改

这就需要采用方法的重写,方法重写又称方法覆盖

规则 :

子类重写父类方法,需要保证方法声明完全一致(方法名,参数,返回值类型需要保持一致)

注意事项 :

* 父类中私有的方法子类不能重写
* 子类重写父类方法的时候,访问权限需要大于等于父类

可以使用注解 @Override校验当前方法是否是一个重写的方法

1.5-Java中继承的特点

1.5.1单继承

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

* 单继承:一个类,只能有一个父类
* 多层继承:子类可以继承父类,父类可以继续继承爷爷类

public class A{
    public void methodA(){
        System.out.println("A...method");
    }
}

public class B extends A {
    public void methodB(){
        System.out.println("B...method");
    }
}

public class C extends B{
}

1.6-继承中构造方法的访问特点

1.6.1-问题 : 构造方法能被继承吗 ?

不可以,  因为构造方法要求方法名和类名保持一致

1.6.2-问题 : 子类初始化之前,  是否需要完成父类的初始化 ?

一定要!因为子类在初始化的过程中,很有可能会使用到父类的数据
因此,子类在初始化之前,一定要先完成父类数据的初始化.

1.6.3-问题:子类是如何完成父类数据初始化的呢?

思考,初始化一个对象,用的是什么方法?

构造方法

1.6.4-问题 : 子类是如何访问到父类构造方法的呢?

在所有构造方法中 (Object类除外),默认隐藏着一句话 super();

通过这句话来访问父类的空参构造方法

1.6.5-问题:如果父类没有空参构造,子类的 super(); 怎么办?

JavaSE进阶——day01_第2张图片

意义所在:子类可以将所需要的所有数据,通过有参构造方法接收,其中父类有的数据,就通过super()交给父类完成初始化!

1.6.6-必掌握案例

JavaSE进阶——day01_第3张图片

1.7this和super关键字

JavaSE进阶——day01_第4张图片

2.final关键字

2.1-介绍

final 关键字是最终的意思,可以修饰(方法,类,变量

2.2-final特点

修饰方法:表明该方法是最终方法,不能被重写

修饰类:表明该类是最终类,不能被继承

修饰变量:表明该变量是常量,不能再次被赋值

常量的命名规范:

一个单词:所有字母大写
MAX
PI

多个单词:所有字母大写,中间使用 _ 分隔
MAX_VALUE
MIN_VALUE

————————————————————————————————————————

基本数据类型 :  数据值不可改变
引用数据类型 :  地址值不可改变

成员变量初始化时机 : 

1). 在定义的时候直接赋值(推荐)
2). 在构造方法结束之前完成赋值

3-static关键字

3.1-static介绍

static 是静态的意思,可以修饰成员变量,也可以修饰成员方法,被其修饰的成员只在内存中 [只存储一份],可以被 [共享] 访问、修改。

3.2-static修饰成员变量

class User{
    String name;
    int age;
    static int onLineNumber;
}
public class StaticTest1 {
    public static void main(String[] args) {
        User.onLineNumber++;
        User u1 = new User();
        u1.name = "张三";
        u1.age = 23;
        System.out.println(u1.name+"---"+u1.age+"---"+User.onLineNumber);

        User u2 = new User();
        u2.name = "李四";
        u2.age = 24;
        System.out.println(u2.name+"---"+u2.age+"---"+User.onLineNumber);
    }
}

特点: 

1. 被 static 修饰的成员变量,  被类的所有对象所共享
2. 多了一种调用方式,  可以通过类名.进行调用
3. 随着类的加载而加载,  优先于对象存在

3.3-static修饰成员变量内存图

JavaSE进阶——day01_第5张图片

 3.4-static修饰成员方法

3.4.1-方法的分类

1. 静态方法
2. 实例方法(非static的)

3.4.2-调用方式 : 

1. 静态方法
        A :  类名调用 (推荐)
        B :  对象调用 (不推荐)
2. 实例方法(非static的)
        A :  只能对象调用

3.4.3-设计思路 :

表示对象自己的行为的,且方法中需要访问实例成员的,则该方法必须申明成实例方法。
如果该方法是以执行一个通用功能为目的,或者需要方便访问,则可以申明成静态方法。

3.5-static修饰成员方法内存图

JavaSE进阶——day01_第6张图片

3.6-工具类

3.6.1-介绍:

对于一些应用程序中多次需要用到的功能,可以将这些功能封装成静态方法,放在一个类中,这个类就是工具类。

3.6.2-好处:

一是方便调用,二是提高了代码复用

3.6.3-要求:  

建议将工具类的构造器私有,不让工具类对外产生对象。

3.6.4-练习:

需求:在实际开发中,经常会遇到一些数组使用的工具类。请按照如下要求编写一个数组的工具类:ArraysUtils


请在ArraysUtils中提供一个工具类方法toString,用于返回整数数组的内容,返回的字符串格式如:[10, 20, 50, 34, 100](只考虑整数数组,且只考虑一维数组)

经常需要统计平均值,平均值为去掉最低分和最高分后的分值,请提供这样一个工具方法getAerage,用于返回平均分。(只考虑浮点型数组,且只考虑一维数组)


定义一个测试类TestDemo,调用该工具类的工具方法,并返回结果。

3.7-static注意事项

静态中只能访问静态,  静态中没 this 

3.8-代码块

3.8.1-介绍:

在Java类下,使用 { } 括起来的代码被称为代码块

3.8.2-分类 : 

局部代码块
    位置:方法中定义
    作用:限定变量的生命周期,及早释放,提高内存利用率

构造代码块
    位置:类中方法外定义
    特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
    作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性

静态代码块
    位置:类中方法外定义
    特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
    作用:在类加载的时候做一些数据初始化的操作

同步代码块
    多线程时再学习

你可能感兴趣的:(JavaSE,java,开发语言)