Day08.01____局部代码块
- 格式 :
- {
代码内容…
}
- {
- 位置: 定义在方法中
- 作用: 限定变量生命周期,开发中不用
Day08.02____构造代码块
- 格式:
- {
代码内容…
}
- {
- 位置: 定义在类中,方法外
- 比构造函数还要先运行,每创建依次对象就会运行一次
- 作用: 随着类的加载而加载,当对象具备相同的属性或相同的行为时 ,需要在每个构造函数中去定义一遍时,可以用构造代码块即 可
Day08.03____静态代码块
- 格式:
- static{
代码内容…
}
- static{
- 位置: 定义在类中,方法外
- 比构造代码块还要先运行,只会在第一次加载时运行,只运行一次
- 作用: 随着类的加载而加载,用于驱动加载( 大型项目会用 )
Day08.04____Java中的继承(extends关键字)
- 优点:
- 提高代码的复用性
- 提高代码的维护性
- 弊端:
- 开发原则:高内聚,低耦合
- 内聚: 自己能够完成的功能,自己完成
- 耦合: 类与类之间的关系
- 开发原则:高内聚,低耦合
- 特点: 只支持单继承,不支持多继承。但允许多层继承
- 什么时候用:当两者的关系是“is a”的关系时,才能用继承;比如猫是动物的一种,此时可以用继承。如果猫和狗直接由共性,此时是不能使用继承的,因为它们不是包含关系
Day08.05____Java中的继承注意事项
- 子类不能访问父类中私有化的成员
- 子类不能调用父类的构造方法,但可以用super进行访问
- 不能因为部分功能就去继承
- 子类调用方法时遵循就近原则,先从自己的类中去找该方法,如果没有,再去父类中找该方法
Day08.06____super( )与super(…)
- A:super( )与super(…)的作用都是用于放在子类构造方法中去访问父类构造方法, 它们只能写在访问构造方法中,并且必须放在第一行
- A:super( )可以访问父类的无参构造方法:
- 当子类继承父类时,虚拟机会在子类的构造方法中的第一行默认加入一个super()。因此当在子类和父类的构造方法中都输出语句时,会先输出父类的输出语句,再输出子类的输出语句。
- B:super(…)可以访问父类的有参构造方法:
-
运用场景:
- 当父类将成员变量都私有化了,但我们又想访问父类的成员变量,就可以通过super(有参)的方法进行访问。做法为:在子类 的有参构造函数中,调用super(传入对应的参数)即可。
-
运用原理:
- 当子类对象被创建时,子类有参构造方法中的name=“张三”,age=24。super方法调用后,super中的name=“张三”,age=24。因为super是访问父类的构造函数的,所以通过父类的有参构造函数就可以将私有的成员变量赋值为name=“张三”,age=24,最后子类可以通过父类提供给外界的方法访问到父类中的私有化成员变量
-
代码:
-
class Person{
private String name;
private int age;
public Person(){}
public Person(String name, int age){
this.name = name;
this.age = age;
}
public void setName(){...}
public String getName(){...}
public void setAge(){...}
public int getAge(){...}
}
class Student extends Person{
......
public Student(String name,int age){
//name与age的值即为形参的值
super(name,age);
}
}
class Demo{
public static void main(String[] args){
Student stu = new Student("张三",24);
System.out.print(stu.getName()+stu.getAge())
}
}
- C:无论是在有参的构造函数中还是在无参的构造函数中,默认加的都是无参的 super()方法
Day08.07____this与super的区别
- (1) 访问成员变量:
- this.成员变量:
- 既可以访问本类的成员变量,也可以访问父类的,访问父类的成员变量时必须是本类没有的,且没有私有化的
- super.成员变量:
- 只能访问父类的成员变量
- this.成员变量:
- (2) 访问成员方法:
- this.成员方法:
- 既可以访问本类的成员方法,也可以访问父类的成员方法。访问父类的成员方法时,该成员方法必须是本类中没有的,且父没有私有化的;
- super.成员方法:
- 只能访问父类的成员方法。
- 只能访问父类的成员方法。
- this.成员方法:
Day08.08____this()与super()的区别
- this( )的含义是调用本类中其他构造方法,至于调用哪一个构造方法是根据参数而定的
- super( )表示直接调用父类的构造方法,如果super(…)中有参数就调用父类有参的构造方法;如果没有参数就调用父类无参的构造方法
Day08.09____this()、super()与this.、super.的区别
- this( )、super( )的形式叫做语句,只能放在构造方法中,用途是为了调用父类的构造方法,并且都必须放在构造方法中的第一行;
- (this.)、(super.)的形式叫做调用,可以放在任何方法里。只是说(super.)调用的是父类的成员变量和方法,(this.)既可以调用本类的成员变量和方法,又可以调用父类的成员变量和方法,调用父类时的前提为本类中没有对应的成员变量和方法
Day08.10____方法的重写( 覆写 )
- 覆写的类型:
- (1) 将父类方法中的内容全部替换掉
- (2) 保留父类原来的内容,并增加新的内容
- 注意事项:
- (1) 父类私有的方法不能被重写
- (2) 父类中static的方法,被重写时不能省去static
- 因为,如果省去,java虚拟机会错乱
- (3)重写的方法在子类中的权限必须大于等于父类中原本的权限
Day08.11____定义类的步骤
- 定义属性( 私有 )
- 定义构造方法( 有参和无参 )
- 定义setXxx()和getXxx()方法
- 定义行为( 方法 )
Day08.12____final关键字
- final可以修饰类、变量、方法:
- final修饰的类不可以被用于继承,也就是说它不会有子类,定义实例如下:
- public final class{}
- final修饰的变量不可被修改,也叫做常量,定义实例如下:
- fianl int PI = 3.14
- final修饰的方法不可被重写,定义实例如下:
- public final void method(){}
- public final void method(){}
- final修饰的类不可以被用于继承,也就是说它不会有子类,定义实例如下:
Day08.13____final修饰引用型变量和基本型变量
- 引用型数据变量包括:
- (1) 类;
- (2) 接口;
- (3) 数组
- 区别:
- (1)修饰基本数据类型变量后,值不可再改变
- (2)修饰引用数据类型变量后,地址不可再改变,但对象的属性值可以改变
Day08.14____final赋值的方式
- 在定义变量时就进行初始化
- public final int NUM = 10
- 使用构造函数初始化,很少用
- public final int NUM;
public Student(){
NUM = 10;
}
- public final int NUM;