java基础学习-继承、多态

继承

继承的作用:

继承是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。

实现语法:

关键字 extends
public class Father {
	final String flag = "zhang";

	public Father() {
		System.out.println("构造Father");
	}

	public void run() {
		System.out.println("father run");
	}
}
 
 
public class Son  extends Father {
	final String flag = "lin";

	public Son() {
		System.out.println("构造Son");
	}

	public void run() {
		System.out.println("son run");
	}
}
public class GrandSon extends Son{
	final String flag = "wang";

	public GrandSon() {
		System.out.println("构造GrandSon");
	}

	public void run() {
		System.out.println("grandson run");
	}
	
	public static void main(String[] args) {
		//强转运行时出错
		//Son son = (Son) new Father();
		
		Son son = new Son();
		System.out.println(son.flag);
		//构造Father
		//构造Son
		//lin
		
		Father father = new Son();
		System.out.println(father.flag);
		father.run();
		//构造Father
		//构造Son
		//zhang
		//son run
		
		Father father2 = new GrandSon();
		System.out.println(father2.flag);
		father2.run();
		//构造Father
		//构造Son
		//构造GrandSon
		//zhang
		//grandson run
	}
}


继承的一些规则:

1.关于构造

默认情况下,调用子类则会先调用父类的默认构造函数
如果在子类的构造方法中想要调用父类的构造方法,super必须使用在第一行语句(很好理解,父类先执行)
如果父类没有默认构造方法时,子类必须使用super显示调用父类特定的构造方法(同上)
如果不想调用父类的默认构造方法,则需在子类的构造方法中使用super(父类构造方法参数);
构造函数不能被继承
当多级继承A extend B B extendC   C extend D extend D 则构造方法(实例)调用顺序DCBA,有父才有子

2.重写

父类的属性与方法子类可以直接使用(private修饰的除外),子类可以重写父类的方法(全部要一样)并覆盖直接调用,此时要调用父类可用super.方法
重写后的方法不能比被重写的方法有更严格的访问权限(可以相同)
重写后的方法不能比重写的方法产生更多的例外

3.super

访问父类被隐藏的成员变量,如:super.variable;
调用父类中被重写的方法,如:super.Method([paramlist]);
调用父类的构造函数, 如:super([paramlist]);

4.多层继承

不支持多继承,但支持多层继承
注意,在多成继承的情况下,从顶层开始继承,也就是构造方法调用顺序
从最顶层开始,所以一般要关注最底层的,因为他如果最后一次重写方法
则以他为主

5.继承范围

 同一个包中不同包中的子类 
private  
default 
protected 
public  

6.其他

重写是伴随着继承的,重载是在同一个类

多态

多态是什么

多态放在这里讲主要是,多态是基于继承
多态体现为:体现为派生类向上转型为基类
如Father father = new Son();
多态是一种运行期的行为不是编译器行为,所以要运行了才出错
多态的一个好处,屏蔽子类的差异性,用父类的一个公共性解决
当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误;
如果有,再去调用子类的该同名方法。

类型转换

1.向上转型

将子类型转换为父类型,向上转型不需要显示指定
Father father = new Son();

2.向下转型

将父类型转换为子类型,向下转型需要显示指定
Father father = (Son)new Son();
Son son = (Son)father;//这样才能调用子类的方法
son.sing();
//Son son = (Son) new Father();//强转失败,运行报错




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值