今日份鼓励:在这个并非尽善尽美的世界上,勤奋会得到报偿,而游手好闲则要受到惩罚 --毛姆
目录
一、继承
注意:
1.JAVA中不支持一个类拥有多个父类
2.在JAVA中的继承不允许出现环路
3.final修饰的类不能被继承
4.类的权限修饰符只能时public与默认修饰符
继承的简单概述:就是对共性的抽取,从而达到了代码的复用
1.继承的使用 ——关键字extends
分析: Duck是子类 Animal是父类
一个简单的继承
父类的代码:
class Animal{
public String name;
public int age;
public double weight;
public void eat(){
System.out.println(this.name+"正在吃饭");
}
public void sleep(){
System.out.println(this.name+"正在睡觉");
}
}
子类继承的代码:
class Duck extends Animal{
public void run(){
System.out.println(this.name+"会游泳");
}
}
2.在使用成员变量的细节
1.直接在子类中可以使用父类的成员变量
2.父类成员变量与子类变量重名——就近原则
优先使用子类的成员变量
3.需要访问父类中的同名变量使用关键字——super
在后面我会写一个关于this与super的博客 它不能在静态的方法中使用
3.子类与父类的构造方法
1.使用super()来使用父类的构造方法
当构造子类的时候一定要先构造父类的构造方法,初始化,子类继承的父类成员,当我们不创建构造方法时,编译器会自动生成。
当使用super()来调用父类的构造方法时我们要把它方在第一行,不能在静态方法中使用,不能与this()同时存在。
2.子类与父类中的静态代码块与实例代码块
1.先执行静态的代码块
2.父类的实例代码块
3.父类的构造方法
2.子类的实例代码块
3.子类的构造方法
4.组合
举个例子:一个学校里由多个老师与学生组成
二、多态
多态的简单概述:一种事物的多种形态
举个例子:我和室友去吃饭
class Aniaml{
public String name;
public int age;
public void eat(){
System.out.println(this.name+"吃饭");
}
}
class Cat extends Aniaml{
public void eat(){
System.out.println(this.name+"吃猫粮");
}
}
class Dog extends Aniaml{
public void eat(){
System.out.println(this.name+"吃狗粮");
}
}
public class TestDeom {
public static void main(String[] args) {
Aniaml aniaml1 = new Cat();
aniaml1.name = "咪咪";
aniaml1.eat();
}
}
1.向上转型——让父类引用指向子类的引用
三种常见的向上转型:
1.直接赋值
public class TestDeom {
public static void main(String[] args) {
Aniaml aniaml1 = new Cat();
aniaml1.name = "咪咪";
aniaml1.eat();
}
}
2.方法的参数
3.方法的返回值
2.方法重写——方法的返回值,方法名,方法的参数都相同
上述的eat()方法就发生了重写
父类的eat()方法
子类的eat()方法
3.多态——动态绑定(运行时绑定),在编译后发生改变
1.实现条件
必须在继承的体系下
子类必须对父类的方法进行重写
通过父类的引用调用重写的方法
2.举个例子:当我们传入的对象不同时,我们调用的方法不同
三、抽象(在后续过程中我会重新补充)
抽象的简单概述:
1.
2.