1、继承是面向对象三大特征之一,三大特征分别是:封装、继承、多态
2、继承基本"的作用是:代码复用。但是继承最"“重要"的作用是:有了继承才有了以后“方法的覆盖"和"多态机制”。
3、继承语法格式:
[修饰符列表] class 类名extends父类名{
类体=属性+方法
}
4、java语言当中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类。在C+ +中支持多继承。
5、关于继承中的一些术语:
B类继承A类,其中:
A类称为:父类、基类、超类、superclass
B类称为:子类、派生类、subclass
6、在java语言当中子类继承父类都继承哪些数据呢?
私有的不支持继承
构造方法不支持继承
其它数据都可以被继承
7、虽然java语言当中只支持单继承,但是一个类也可以间接继承其它类,例如:
C extends B{
B extends A{
A extends T{
}
}
}
C直接继承B类,但是c类间接继承T、A类。
8、java语言中假设一个类没有显示的继承任何类,该类默认继承JavaSE库当中提供的java . lang . Object类。
1、方法覆盖又被称为方法重写,英语单词: override [官方的] /overwrite
2、什么时候使用方法重写?
当父类中的方法已经无法满足当前子类的业务需求,
子类有必要将父类中继承过来的方法进行重新编写,
这个重新编写的过程称为方法重写/方法覆盖。
3、什么条件满足之后,方法会发生重写呢? [代码满足什么条件之后,就构成方法的覆盖呢? ]
*方法重写发生在具有继承关系的父子类之间
*方法重写的时候: 返回值类型相同,方法名相同,形参列表相同
*方法重写的时候: 访问权限不能更低,可以更高。
*方法重写的时候: 抛出异常不能更多,可以更少。
4、建议方法重写的时候尽量复制粘贴,不要编写,容易出错,导致没有产生覆盖。
5、注意:
私有方法不能继承,所以不能覆盖。
构造方法不能继承,所以不能覆盖。
静态方法不存在覆盖。
覆盖只针对方法,不谈属性。
1、this是一 个关键字,翻译为:这个
2、this是一个引用,this是一个变量, this变量中保存了内存地址指向了自身,this存储在JVM堆内存java对象内部。
3、创建100个java对象,每一个对象都有 this,也就说有100个不同的this
4、this可以出现在’'实例方法"当中,this指向当前正在执行这个动作的对象。( this代表当前对象)
5、this在多数情况下都是可以省略不写的
6、this不能使用在带有static的方法当中
1、使用abstract关键字修饰没有方法体的方法我们称之为:抽象方法
2、使用abstract关键字修饰的类我们称之为抽象类
// 抽象类
public abstract class Person {
// 使用abstract关键字修饰没有方法体的方法我们称之为:抽象方法
public abstract void eat();
}
3、注意:
// 抽象类不一定必须要有抽象方法
public abstract class Person01 {
// 以下方法不是抽象方法
public void eat() {
System.out.println("贫者不受嗟来之食");
}
}
/**
* Male是子类继承父类Person
*/
public class Male extends Person{
//无参构造方法
public Male() {
}
//有参构造方法
public Male(String name, int age, int sex) {
//super的作用是调用父类的方法
super.setAge(age);
super.setName(name);
super.setSex(sex);
System.out.println("窈窕淑女,君子好逑");
}
}
测试:
@Test
public void test02() {
Male male = new Male("张三",18,1);
System.out.println("张三的年龄是>>>" + male.getAge());
System.out.println("张三的名字是>>>" + male.getName());
System.out.println("张三的性别是>>>" + (male.getSex() == 1? "男" : "女"));
System.out.println("********************************");
}
测试结果:
窈窕淑女,君子好逑
张三的年龄是>>>18
张三的名字是>>>张三
张三的性别是>>>男
********************************