java 中派生_Java 类的继承与派生

派生类一般格式:

[类的修饰符] class 子类名 extends 父类名{

成员变量定义

成员方法定义

}

public classAutoMobileTest {public static voidmain(String args[]) {

AutoMobile car=newAutoMobile();

car.showNumber();

Truck toto=newTruck();

toto.showNumber();

car.testdefault();

}

}classAutoMobile {public intpublicNum;intdefaultNum;protected intprotectedInt;private intprivateInt;public voidshowNumber() {

System.out.println("AutoMobile Number is :"+defaultNum);

}public void setNumber(intnewNumber) {

defaultNum=newNumber;

}voidtestdefault() {

System.out.println("It works");

}

}classTruck extends AutoMobile{

@Overridepublic voidshowNumber() {//重写。重写showNumber

System.out.println("truck number is:"+defaultNum);

}

}

重写override:将父类的方法重新定义,static方法无法重写

要调用超类的同名方法,使用super.method();

调用超类的构造方法(显式)使用super()

2、继承下的构造方法和finalize方法

构造方法是从父类的父类,直到Object类(所有类的父类)开始的;

可显式(super(...))可隐式,

阻止继承:final关键字

public classSupetTest {public static voidmain(String args[]) {

Graduate xiaoming=newGraduate();

xiaoming.run();

}

}classHuman{publicHuman(){

System.out.println("Human constructor");

}public void run() {System.out.println("Human run");}

}class Student extendsHuman{static String se="se";publicStudent() {

System.out.println("student constructor");

}public voidrun() {

System.out.println("Student run");

}

}class Graduate extendsStudent{publicGraduate() {

System.out.println("Graduates constructor");

}public voidrun() {super.run();

System.out.println("Gradute run");

}

}

finalize则从子类的finalize方法开始,往上执行,

在子类的finalize方法中最后应调用父类的finalize方法:super.finalize()

3、超类和子类的问题

若子类直接继承父类的变量,可能会赋予其非法值。

所以:子类方法应依赖于超类的服务接口而不是实现。

(将变量设置成private,再使用public方法进行访问)

4、继承层次中对象间的关系

子类对象可以视为超累的对象,将子类对象赋给超类变量

Circle circle1=newCircle();

Point point1=newPoint();

Point pointRef=new Circle();

5、抽象类 方法

abstract

抽象类至少含有一个抽象方法。只能作为超类被继承

关键字abstract,抽象类,抽象方法(不提供方法体)。

静态方法不能作为抽象方法

抽象类的所有具体子类必须提供抽象方法的具体实现。

6、接口

接口用于声明一组类的公共操作(功能)

接口由:一组常量+一组抽象方法 组成

一个类可以实现多个接口  类名 [extends 父类名] implements 接口1,接口2,接口3

接口的声明

[public ] interface 接口名 [extends 父接口名]{

[public]  [static] [final] 类型 常量名 = 常量值;常量定义

[public]  [abstract] 返回类型 方法名(参数);抽象方法定义

}

public interface 的public决定是否可包外访问

public static final 类型 常量名 的修饰符都可缺省不写,因为必定public。static。final

public abstract 也可缺省不写

如何访问接口中的常量

public class VisitVariable implementsA{static int k = 0;public static voidmain(String[] args) {

VisitVariable test= newVisitVariable();

k= test.i;//实现了接口的类对象来访问

k = VisitVariable.i;//实现了接口的类名来访问

k = A.i;//接口名来访问

}

}interfaceA {int i = 10;//接口中的常量

}

7、final 方法 和 final 类

子类不能重写超类中的final方法,final隐式地为private方法。

final类不能为超类,其中的所有方法都隐式地为final方法

final类可以防止创建绕过安全限制的子类

8、内部类

声明

[修饰符]classouterClass{

。。。

[修饰符]classinnerClass{

。。。

}

。。。

}

内部类主要用于事件处理,可以访问外部类内定义的所有成员

9、匿名内部类

在定义匿名内部类的地方直接创建该类的一个对象。往往用于注册Java组件的事件处理对象

new object(){

....\\内部类的定义

}

嵌套类编译时文件名:OutterClassName$InnerClassName.class

匿名内部类编译时文件名:OuterClassName$#.class(#从1开始,往上递增)

内部类可以使用OuterClassName.this访问外部类的this

如何创建内部类的对象:

先创建一个外部类对象outref

然后:

OuterClassName.InnerClassName.innerRef = outref.new InnerClassName()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值