java 学习笔记 day07 类的继承、多态、super关键字
程序员文章站
2022-04-20 08:30:54
1.类的继承java中只支持单继承,不支持多继承。但是支持【多层】继承。2.super关键字super关键词用于访问父类成员的参数。public class Father { public int age =45;}public class Son extends Father{ private int age=10; public void show(){ int age =33; System.out.println(age);//方...
java 学习笔记 day07 类的继承、多态、super关键字
1.类的继承
java中只支持单继承,不支持多继承。但是支持【多层】继承。
2.super关键字
super关键词用于访问父类成员的参数。
public class Father {
public int age =45;
}
public class Son extends Father{
private int age=10;
public void show(){
int age =33;
System.out.println(age);//方法内定义的变量
System.out.println(this.age);//本类的变量
System.out.println(super.age);//父类的变量
}
}
public class ExtendTest {
public static void main(String[] args) {
Son s= new Son();
s.show();
}
}
运行结果如下:
4.类的继承时构造方法的继承
子类构造方法执行时,会先执行父类的无参构造方法,如果父类没有无参构造,则使用super(arg1,arg2…)来访问父类的带参构造方法。
public class Father {
//这是父类
public Father(String name){
System.out.println("father name:"+name);
}
public void show(){
System.out.println("father 类调用");
}
}
public class Son extends Father{
//这是子类,继承自父类
public Son(){
super("w");//对父类进行初始化,如果父类有无参构造方法,这一句可以省略
}
public void sing(){
System.out.println("song singing");
}
}
public class ExtendTest {
//定义子类的对象时,父类也进行了初始化
public static void main(String[] args) {
Son s=new Son();
// s.show();
s.sing();
}
}
返回结果如下:
5.方法重写
1、用类继承对父类进行重写
2、用@override 对重写的方法进行标记
3、父类私有的方法不能被重写
4、子类重写父类的方法时,访问权限不能更低(建议权限一样)
private --默认修饰符 --public
6.多态
多态中成员访问的特点:
A;成员变量:编译看左边,执行看左边
B :成员方法:编译看左边,执行看右边
public class Cat extends Animal {
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Dog extends Animal {
public void eat() {
System.out.println("狗吃骨头");
}
public void lookDoor() {
System.out.println("狗看门");
}
}
public class AnimalOperator {
public void useAnimal(Animal a) { //Animal a = new Cat();
a.eat();
//a.lookDoor();
}
}
多态的转型:
- 向上转型
-
从子到父, 父类引用指向子类对象
- 向下转型
-
从父到子 ,父类引用转为子类对象
public class DuoTaiDemo {
public static void main(String[] args) {
//多态
Animal a = new Cat(); //向上转型
a.eat();
//a.playGame();
//多态的弊端:无法访问子类特有方法
//现在我就想使用子类特有方法,怎么办呢?
//创建子类对象就可以了
/*
Cat c = new Cat();
c.eat();
c.playGame();
*/
//现在的代码虽然可以访问子类的特有功能,但是不合理
//因为我们发现内存中有两个猫类的对象
//这个时候,我们得想办法把多态中的猫对象还原
//这个时候,就要使用多态中的转型了
//父类引用转为子类对象
Cat c = (Cat)a;
c.eat();
c.playGame();
}
}
本文地址:https://blog.csdn.net/weixin_39210914/article/details/109566271