Java Day8

1.访问权限

public

公告的,所有包内包外都可以访问的

default

包访问权限,在自己包内可以随意访问

private

私有的,自己类可访问

2.getter & setter

  • setter:主要给成员变量赋值的成员方法,做一定保护;

  • getter:从成员变量中获取值的成员方法;

  • 通过成员方法访问或更改,给成员属性给予保护,使程序更加健壮

  • Idea 可以通过getter和setter 自动添加其方法

image-20221029090820497

3.继承

  • 子类自动拥有父类中除了私有内容外的其他所有

继承:

public class 子类 extends 父类{

}

  • 私有内容不能被继承
  • 类不能加private修饰

作用:简化代码的开发

子类是对父类进行扩展

思想:子类对父类的继承,将某种具有部分相同属性功能的类再进行抽象,建立一个共有属性的类,其余子类通过继承该父类,从而使开发变得更为简洁明了

4.super

  • 变量的查找顺序,先找自己类然后再找父类,就近原则;
  • 如果想要访问父类中的内容

super.*; 可访问子类中与父类重名的内容

  • 在创建每一个子类对象时,编译器并为其分配内存,都在子类对象中隐式声明创建了一个父类并且先执行创建父类。而这个父类就是super

5.方法重写

  • 子类对父类提供的方法进行重新定义
  • 子类方法与父类方法完全一致
  • 也叫作方法覆盖
  • super可以在子类中调用父类的方法

半覆盖

​ 在子类重构方法中使用了super调用父类同名的方法

全覆盖

​ 重构了父类中的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Demo1 extends Demo2{

@Override
public void pt() {
// 半覆盖
// super.pt();


// 全覆盖
System.out.print("子类的方法");
}
public static void Main(String[] args){
Demo1 d = new Demo1();
d.pt();
}

}

6.多态

实现多态的条件

  1. 继承:必须要有子类继承父类的继承关系。
  2. 重写:子类需要对父类中的一些方法进行重写,然后调用方法时就会调用子类重写的方法而不是原本父类的方法。
  3. 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
  • 同一个对象拥有多种形态

  • 把不同的数据类型进行统一

把子类的对象赋值给父类的变量->向上转型(会屏蔽子类中特有的方法)

把父类的变量转化会子类的变量->向下转型(向下类型转型有风险必须强制转换)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class Animal {
int age = 0;

public void age(){
System.out.println("动物" + this.age);
}

}
public class Cat extends Animal{
String name = "小黑";
int age = 5;
public void age() {
System.out.println("动物的你年龄" + this.age);
System.out.println("猫" + this.age);
super.age();
}
}

public class Main {
public static void main(String[] ages){
Animal ani = new Cat();

ani.age();
// ((Cat) ani).name = "小红";
Cat c = (Cat)ani;
System.out.println(((Cat)ani).name);

}
}

子类集成父类 父类 变量 = new 子类(); 继承的基本条件

子类要重载(重写) 父类中方法 继承条件2

多态触发后 子类除了重写的方法 其余方法、属性都将不可见(但创建的属性方法都存在),因此任何在子类中访问非重写方法都是未定义的;

可通过向下强转回该类 方法与强转基础数据类型一致

  • 作用使程序有很强的拓展性