2018_3_8 继承_2

1.重写(覆盖):子类中出现与父类方法名相同,返回值类型相同,参数列表相同,访问权限大于或等于父类的方法

即:父类的这个同名方法被重写了

目的是,满足不同子类的不同需求

2.区分重载与重写:

重载:同一个类中,方法名相同,但参数列表不同,即为重载,重载与返回值类型,访问修饰符无关

重写是子类和父类之间的同名方法,要求:

方法名相同;

参数列表相同;

返回值类型相同;

访问修饰符不能严于父类

3.继承条件下构造方法的调用规则:

如果子类的构造方法中没有通过super显示调用父类的有参构造方法,也没有通过this显示调用自身的其它构造方法,则系统会默认先调用父类的无参构造方法。在这种情况下,有没有“super();"语句,效果是一样的;

如果子类的构造方法中通过super显示调用父类的有参构造方法,则将执行父类相应的构造方法,而不执行父类无参构造方法;

如果子类的构造方法中通过this显示调用自身的其他构造方法,则在相应构造方法中应用以上两条规则;

特别注意的是,如果存在多级继承关系。则在创建一个子类对象时,以上规则会多次向高一级父类应用,一直到执行顶级父类Object 类的无参构造方法为止

4.抽象关键字:abstract

abstract 可以修饰类

也可以修饰方法

但不可以修饰属性和构造方法

5.抽象类不可以实例化

抽象方法不可以被调用,且子类必须重写这个方法,否则报错

6.有抽象方法的类必须申明为抽象类

子类必须重写所有的抽象方法才能实例化,否则子类还是一个抽象类;

7.关键字:final

用final 修饰的类,不能再被继承

用final 修饰的方法不能被子类重写

用final修饰的变量(包括成员变量和局部变量)将变成常量,只能赋值一次

8.常见错误

a.final修饰引用型变量,变量所指的对象的属性值能否改变

 例子:请指出以下代码错误

class Dog
{
	String name;
	public Dog(String name)
	{
		this.name=name;
	}
}
class Test
{
	public static void main(String[]args)
	{
		final Dog dog=new Dog("狗狗");
			dog.name="妹妹";
			dog=new Dog("丫丫");
	}
}

很多人一看以为 dog.name="妹妹";这行错了

其实dog=new Dog("丫丫");错了

b.abstract 是否可以和private,static,final,共用?

例子:下面选项中关于abstract 的使用正常的是()

A.private abstract void sleep();

B.static abstract void sleep();

c.final abstract void sleep();

D.public abstract void sleep();

A错,抽象方法是让子类重写的,而子类无法继承到private方法,自然不能重写

B错,抽象方法不能实例化,static方法可以通过类名访问,但无法访问一个没有实现的方法

C错,抽象方法是用来重写的,而加了final方法将不能重写,相互矛盾

D对



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值