欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java 学习笔记 day07 类的继承、多态、super关键字

程序员文章站 2022-08-29 13:37:41
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();
    }

}

运行结果如下:
java 学习笔记 day07 类的继承、多态、super关键字

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();
    }
}

返回结果如下:
java 学习笔记 day07 类的继承、多态、super关键字

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