Java基础(九)方法重写和多态
回顾
1.封装
public class Student{
public String name;
public int age;
}
Student stu = new Student();
stu.name = "";
stu.age=1000;
public class Student{
// 只能在本类中访问
private String name;
private int age;
```
// 赋值方法
public void setAge(int age){
if(age > 100 || age < 0){
syso(xxx);
}else{
this.age = age;
}
}
// 获取值方法
public int getAge(){
return this.age;
}
}
步骤:
- 1.属性私有化
- 2.提供公共的(public)修饰的getter/setter方法
- 3.在方法中加入逻辑控制语句
2.static关键字
public class Student{
static public String name;
public int age;
}
- static修饰的是类的(所有对象共享)
- 非static修饰的是对象的
代码块:
// 非静态代码块/构造代码块/成员代码块
// 每一次创建对象 就进行执行
{
}
// 类加载的时候会执行 只会执行一次
// 静态代码块
static{
}
顺序:
static静态代码块 -> 构造代码块 -> 构造方法
3.继承
public class Dog extends Animal{
}
public class Cat extends Animal{
}
//抽取父类 把共同拥有的信息 抽到了父类里
public class Animal{
public String name;
public int age;
public String gender;
}
Java中的继承:单继承/单根继承 符合is a的关系
本章内容
1.实现方法重写
方法重载:
方法名相同 参数列表不同 与方法的访问修饰符和返回值类型无关。
// 分别实现两个整数和两个小数的求和计算
public int getSum(int a,int b){
return a + b;
}
public double getSum(double a , double b){
return a+b;
}
方法重写:
出现的时机:子类继承父类后,子类发现父类的方法(太垃圾),不够强大!无法满足
子类中的需求,于是我们选择将父类的方法进行重写。
@Override // 可以检验是否是方法重写
方法重写是出现在子类中的一种方法情况。
1.子类中的方法名和参数列表和父类中的完全一样。
2.返回值类型不能大于父类中的方法
3.访问修饰符不能严于父类中的方法
4.抛出的异常不能多于且不能高于父类的方法…
2.方法重载和重写的区别
示例:
// Pet dog 父类的引用
// new Dog(); 子类的对象
Pet dog = new Dog(); // 父类的引用指向子类的对象
当调用父类的方法时,(如果子类重写了父类的方法)会调用子类重写过的方法.
3.了解Object类
你编写的类 都会直接或者间接继承自Object类(超类/祖宗类)。
Object类 里拥有很多方法
例如:
public boolean equals(Object obj) {
return (this == obj);
}
例如:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
调用println()方法 实质上就在调用 toString方法。
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
4.equals和==的区别
== 如果比较基本数据类型 比较的是数据的值。
如果比较引用数据类型 比较的是地址值
而equals()方法 是Object类型的方法默认也是比较地址值
但是String等类 进行了重写,所以比较字符串的时候equals()方法 可以比较字符串是否内容相等。
掌握重写equals()方法
5.会使用instanceof运算符
Object dog = new Dog();
Object student = new Student();
System.out.println(dog instanceof Student);
System.out.println(student instanceof Student);
6.会使用向上转型
//理解为自动类型转换。
示例:
double a = 10;
Pet pet = new Dog();
7.会使用向下转型
理解为强制类型转换:
示例:
int i = (int)10.9;
Dog dog = (Dog)pet;
8.多态
多态:父类的引用指向子类的对象
(多种状态)
Dog dog = new Dog();
Pet pet = new Dog();
1.父类的引用作为方法的形参
2.父类的引用作为方法的返回值类型
抽象方法和抽象类
我们发现 多个子类 在自我介绍时,介绍的内容都不相同。
所以父类里去编写内容毫无意义。但是如果将父类的自我介绍方法删除,
又没法实现多态,所以将方法定义为抽象。
抽象类里可能有抽象方法,有抽象方法的一定是抽象类。
父债子偿:父类的抽象方法子类一定要去实现(重写),如果不实现子类也是一个抽象类。