分为封装、继承、多态
封装:属性私有,get/set
public class Student {
//名字
private String name;
//学号
private int age;
//性别
public char sex;
public int getAge() {
return age;
}
public void setAge(int age) {
if (age > 120 || age < 0){
System.out.println("error");
}
else {
this.age = age;
}
}
- extends的意思是扩展,子类是父类的扩展
- Java中类只有单继承,没有多继承!
- 继承是类和类的关系,两种类之间还有依赖、组合、聚合等关系
package oop.Demo05;
//Student 属于 Person
public class Student extends Person{
}
- object类 是不声明也会用的,一种本地的类
- super
- 方法重写
ctrl+H
可以显示继承的关系
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fG7TYamX-1653570718986)(继承.assets/image-20220509224509293.png)]
super注意点:
- super调用父类的构建方法,必须在构建方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super和this不能同时调用构造方法
this
代表对象不同:
- this:本身调用的这个对象
- super:代表父类对象的引用
前提:
- this:没有继承也可以使用
- super:只能在继承条件下才可以使用
构造方法:
- this():本类的构造
- super():父类的构造
//在子类进行无参构造时,父类必须要有无参构造或者无构造,不然就会报错
//要是父类有有参构造,子类就会报错
//下面这种情况就会报错
public class Person {
public Person(String a){
}
}
public class Student extends Person{
public Student(){
System.out.println("Student无参");
}
}
//
public class Person {
public Person(){
}
}
public class Student extends Person{
//该行会有一个默认的super();
public Student(){
System.out.println("Student无参");
}
}
重写:要有继承关系,子类重写父类的方法!
- 方法名必须相同
- 参数列表必须相同
- 修饰符:范围可以扩大但不能缩小: public>protected>dewfault>private
- 抛出异常:范围可以被缩小但不能扩大:ClassNotFoundException --> Exception(大)
多态注意事项:
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系 类型转换异常!ClassCastException!
-
存在条件: 继承关系,方法需要重写,父类引用指向子类对象! Father f1 = new Son();
-
static 方法,属于类,不属于实例
-
final 常量
-
private 方法
上述三种都不能多态
-
instanceof 类型转换
-
父类引用指向子类的对象
-
把子类转换为父类,向上转换
-
把父类转换为子类,向下转换;需要强制转换才行
-
方便方法的调用,减少代码量
-
public class Teacher extends Person{ public static void main(String[] args) { // Object > String // Object > Person > Teacher // Object > Person > Student Object object = new Student(); System.out.println(object instanceof Student); System.out.println(object instanceof Person); System.out.println(object instanceof Object); System.out.println(object instanceof Teacher); Person obj = new Student(); } }
抽象类
public abstract class Action {
//约束~有别的方法来实现
//abstract 抽象方法 只有方法名字 没有方法实现
public abstract void doSomething();
//1. 不能new这个抽象类,只能靠子类去实现:约束
}
public class A extends Action{
/@Override
public void doSomething() {
}
}