java继承

    xiaoxiao2025-05-20  4

    /** * Base.java * Created by LiuinStein on 2016/5/6. */ public class Base { public int pubA; private int priB; protected int proC; int friD; public int HidA; Base() { pubA = 1; priB = 2; proC = 3; friD = 4; HidA = 5; } Base(int a, int b, int c, int d) { pubA = a; priB = b; proC = c; friD = d; } public int getPriB() { return priB; } protected void ChangeB(int a) { priB = a; } public void SetHidA(int a) { HidA = a; } public int getHidA() { return HidA; } public void fun() { System.out.println("Base fun load"); } } /** * Derviced.java * Created by LiuinStein on 2016/5/6. */ public final class Derived extends Base { //从Base类中继承 //使用final关键字将类声明为final类,final类不能被继承不能有子类 /** * 从基类中自然继承了除private成员之外的其他成员 */ public int A; private int B; protected int C; public double HidA; //在派生类中对基类的HidA进行重写, //但是还是可以通过基类继承下来的函数对基类HidA进行读写 Derived() { // //* 当用子类的构造方法创建一个对象时,子类的构造方法总是先调用 //* 父类的某个构造方法,也就是说子类的构造方法没有明显的指明 //* 使用父类的哪个构造方法,子类就调用父类不带参数的构造方法 //* 也就是说子类的所有成员都会被分配内存空间,虽然private类型 //* 不会被继承,但是也分配了内存空间 //* 如此看来,这好像是浪费了一部分内存,但是其实并不是这样 //* 在子类的继承的父类的方法中,仍然可以操纵那些变量 // super(1, 2, 3, 4); //使用super关键字调用父类的构造方法 //而且super关键字必需在构造函数的首条 A = -1; B = -2; C = -3; HidA = -4; //pubA = 4; //proC = 5; } public int getA() { return pubA; } public int getC() { return proC; } public int getD() { //如果子类与父类不在同一个包中那么像这样的友好成员不能被继承 return friD; } final public void fun() { //方法的重写,必需保持函数的返回值和形参都相同才是重写 //重写只能提升方法的访问权限不能降低访问权限 //注意还使用了final关键字,使用final关键字修饰的方法不能被重写 System.out.println("Derived fun load"); } public void fun(int x) { //形参如果不一致的话为重载而不是重写 System.out.println("Derived fun(" + x + ") load"); } public void supFun() { System.out.println(super.HidA); //使用super关键字可以方位基类的隐藏成员 super.fun(); //使用super关键字访问基类的隐藏方法 } // public int fun(){ // 重写方法的返回值与基类的不一致会产生编译错误 // return 8; // } } /** * Main.java * Created by LiuinStein on 2016/5/6. */ public class Main { public static void main(String[] args) { Derived der = new Derived(); System.out.println("Derived default B " + der.getPriB()); der.ChangeB(100); //在派生类中使用基类的函数仍可以改变private B的值 System.out.println("Derived changed B " + der.getPriB()); System.out.println("Derived HidA: " + der.HidA); der.SetHidA(15); System.out.println("Base HidA: " + der.getHidA()); der.fun(); der.fun(5); der.supFun(); Base derBase = new Derived(); //对象的上转型对象,跟C++的基类指针分配子类内存差不多 //上转型对象不是使用子类的成员变量和成员方法,可以访问子类继承或子类重写的方法 derBase.fun(); //相当于是使用子类重写的fun函数 } } 首发于我的个人网站:  点击打开链接
    转载请注明原文地址: https://ju.6miu.com/read-1299072.html
    最新回复(0)