首页 / JAVA / Java 类的继承与派生
Java 类的继承与派生
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java 类的继承与派生,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3769字,纯文字阅读大概需要6分钟。
内容图文
![Java 类的继承与派生](/upload/InfoBanner/zyjiaocheng/624/d0e743cc95274d32a5d32f9ddcbbe449.jpg)
派生类一般格式:
[类的修饰符] class 子类名 extends 父类名{
成员变量定义
成员方法定义
}
public class AutoMobileTest { public static void main(String args[]) { AutoMobile car=new AutoMobile(); car.showNumber(); Truck toto=new Truck(); toto.showNumber(); car.testdefault(); } } class AutoMobile { public int publicNum; int defaultNum; protected int protectedInt; private int privateInt; public void showNumber() { System.out.println("AutoMobile Number is :"+defaultNum); } public void setNumber(int newNumber) { defaultNum=newNumber; } void testdefault() { System.out.println("It works"); } } class Truck extends AutoMobile{ @Override public void showNumber() { //重写。重写showNumber System.out.println("truck number is:"+defaultNum); } }
重写override:将父类的方法重新定义,static方法无法重写
要调用超类的同名方法,使用super.method();
调用超类的构造方法(显式)使用super()
2、继承下的构造方法和finalize方法
构造方法是从父类的父类,直到Object类(所有类的父类)开始的;
可显式(super(...))可隐式,
阻止继承:final关键字
public class SupetTest { public static void main(String args[]) { Graduate xiaoming =new Graduate(); xiaoming.run(); } } class Human{ public Human(){ System.out.println("Human constructor"); } public void run() {System.out.println("Human run");} } class Student extends Human{ static String se="se"; public Student() { System.out.println("student constructor"); } public void run() { System.out.println("Student run"); } } class Graduate extends Student{ public Graduate() { System.out.println("Graduates constructor"); } public void run() { super.run(); System.out.println("Gradute run"); } }
finalize则从子类的finalize方法开始,往上执行,
在子类的finalize方法中最后应调用父类的finalize方法:super.finalize()
3、超类和子类的问题
若子类直接继承父类的变量,可能会赋予其非法值。
所以:子类方法应依赖于超类的服务接口而不是实现。
(将变量设置成private,再使用public方法进行访问)
4、继承层次中对象间的关系
子类对象可以视为超累的对象,将子类对象赋给超类变量
Circle circle1=new Circle(); Point point1=new Point(); 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 implements A{ static int k = 0; public static void main(String[] args) { VisitVariable test = new VisitVariable(); k = test.i;//实现了接口的类对象来访问 k = VisitVariable.i;//实现了接口的类名来访问 k = A.i;//接口名来访问 } } interface A { int i = 10;//接口中的常量 }
7、final 方法 和 final 类
子类不能重写超类中的final方法,final隐式地为private方法。
final类不能为超类,其中的所有方法都隐式地为final方法
final类可以防止创建绕过安全限制的子类
8、内部类
声明
[修饰符]class outerClass{ 。。。 [修饰符]class innerClass{ 。。。 } 。。。 }
内部类主要用于事件处理,可以访问外部类内定义的所有成员
9、匿名内部类
在定义匿名内部类的地方直接创建该类的一个对象。往往用于注册Java组件的事件处理对象
new object(){
....\\内部类的定义
}
嵌套类编译时文件名:OutterClassName$InnerClassName.class
匿名内部类编译时文件名:OuterClassName$#.class(#从1开始,往上递增)
内部类可以使用OuterClassName.this访问外部类的this
如何创建内部类的对象:
先创建一个外部类对象outref
然后:
OuterClassName.InnerClassName.innerRef = outref.new InnerClassName()
内容总结
以上是互联网集市为您收集整理的Java 类的继承与派生全部内容,希望文章能够帮你解决Java 类的继承与派生所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。