抽象类 接口 继承

Java中所有的类都是Object的子类。

 

子类继承超类中所有可以被子类访问的成员(变量和方法)

子类不能继承超类的构造方法。

子类除了可以继承超类中的变量及方法,还可以增加自己的成员。当一个超类成员不适合该子类时,子类会以恰当的方式重新定义它,就是隐藏超类的成员。

 

子类不能继承超类的构造方法,但在子类构造方法中可以使用super(参数列表)调用超类的构造方法

如果子类的构造方法中没有显式的调用超类构造方法,也没有用this关键字调用重载的其他构造方法,则在产生子类的实例对象时,系统默认调用超类无参构造方法。

如果子类构造方法中没有显式地调用超类构造方法,而超类中又没有无参数的构造方法,则编译出错。所以,我们在定义类时,只要定义了有参数的构造方法,通常还需要定义一个无参数的构造方法。

 

创建子类对象时,系统会隐式先为其各自创建对应的父类对象。

 

extends和implements的关系

extends是继承,类只能继承类,接口只能继承接口。如接口A可以继承接口B,那么接口A就会得到接口B声明的变量和方法。

implements是实现,只能实现接口,不能实现抽象类。如类A可以实现接口A,那么类A必须实现接口A的所有方法,不然A就是抽象类。

注意继承和实现的区别。

 

接口Interface

1. 接口中的成员变量默认都是public、static、final类型的,必须被显式初始化。

2. 接口中的方法默认都是public、abstract类型的。

3. 接口中只能包含public、static、final类型的成员变量和public、abstract类型的成员方法。(可以省略其中一个或多个修饰符)

4. 接口没有构造方法,不能被实例化,在接口中定义构造方法是非法的。

5. 一个接口不能实现另一个接口,但它可以继承多个其他接口。interface C extends A, B{} // A和B都是接口

6. 当类实现某个接口时,它必须实现接口中所有的抽象方法,否则这个类必须被定义为抽象类。

7. 接口中没有方法体

 

在类的继承中,只能做单重继承,而实现接口时,一次则可以实现多个接口,每个接口间使用逗号“,”分隔。

这时就可能出现常量或方法名冲突的情况,解决该问题时,如果常量冲突,则需要明确指定常量的接口,这可以通过“接口名.常量”实现。如果出现方法冲突时,则只要实现一个方法就可以了。

如下例子:

package com.ez;
/**
 * 机器
 * @author 窗外赏雪(EZ编程网)
 */
public interface Machine  {
	/**
	 * 功率
	 */
	int power=10;
	
	/**
	 * 机器都会转动
	 */
	void turn() throws RuntimeException;
}

 

package com.ez;
/**
 * 交通工具
 * @author 窗外赏雪(EZ编程网)
 */
public interface Vehicle {
	/**
	 * 速度
	 */
	int speed=10;
	/**
	 * 功率
	 */
	int power=20;
	/**
	 * 交通工具都会滴滴叫
	 */
	void didi();
	/**
	 * 转动
	 */
	void turn();
}

 

package com.ez.impl;

import com.ez.Machine;
import com.ez.Vehicle;

public class Corolla2 implements Machine,Vehicle{

	@Override
	public void didi() {
		System.out.println(Machine.power);
	}

	@Override
	public void turn() throws RuntimeException {
		System.out.println(Vehicle.power);
	}
	
}

 

抽象类:任何包含抽象方法的类必须被声明为抽象类。

抽象类和抽象方法都必须用abstract关键字来修饰

抽象类不能实例化,即不能用new关键字去产生对象。

抽象方法只需声明,不需实现。

含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有的抽象方法后,才能被实例化,否则这个子类还是个抽象类。

 

最终类:是指不能被继承的类,即最终类不能有它的子类。

如:final class C1

 

最终方法不能被子类重写。

如:final void m1();

 

final变量只能赋值一次(只能在声明的同时或在该类的构造方法中赋值)。

 

静态final变量只能赋值一次,并且只能在声明的时候赋值。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值