zoukankan      html  css  js  c++  java
  • Java继承

    在计划继承时一个比较好的规则是:将所有类的成员字段都设为private,并将所有的方法都设置为public(protected成员也与允许衍生出来的类访问它)

    Java提供了一个super关键字用来引用父类中的相关方法。

    进行继承时,我们并不限于只能使用基础类的方法。亦可在衍生出来的类里加入自己的新方法。

    创建衍生类(继承类)的一个对象时,它在其中包含了一个基础类(父类)的一个“子对象”。

    基础类子对象应该正确地初始化,而且只有一种方法能保证这一点:在构造函数中执行初始化,通过调用基础类的构造函数,后者有足够的能力和权限来执行对基础类的初始化。在衍生类(继承类)的构建器中,Java 会自动插入对基础类构建器的调用。

    /**
     * Created by xfyou on 2016/11/1.
     */
    class Cleanser {
        private String s = new String("Cleanser");
    
        public void append(String a) {
            s += a;
        }
    
        public void dilute() {
            append(" dilute()");
        }
    
        public void apply() {
            append(" apply()");
        }
    
        public void scrub() {
            append(" scrub()");
        }
    
        public void print() {
            System.out.println(s);
        }
    
        public static void main(String[] args) {
            Cleanser x = new Cleanser();
            x.dilute();
            x.apply();
            x.scrub();
            x.print();
        }
    }
    
    public class Detergent extends Cleanser {
        // Change a method
        public void scrub() {
            append("Detergent.scrub()");
        }
    
        // Add methods to the interface:
        public void foam(){
            append("foam()");
        }
    
        // Test the new class
        public static void main(String[] args) {
            Detergent x = new Detergent();
            x.dilute();
            x.apply();
            x.scrub();
            x.foam();
            x.print();
            System.out.println("Testing base class:");
            Cleanser.main(args);
        }
    }

      当基础类中用含有自定义了一个含有自变量的构造函数时(覆盖了默认的构造函数),继承类的构造函数中必须明确地显示的对父类构造函数的调用

    public class Chess extends BoardGame {
        public Chess() {
            super(11);
            System.out.println("Chess constuctor");
        }
    
        public static void main(String[] args) {
            Chess x = new Chess();
        }
    }
    
    class Game{
        public Game(int i) {
            System.out.println("Game constructor");
        }
    }
    
    class BoardGame extends Game{
        public BoardGame(int i) {
            super(i);
            System.out.println("BoardGame constructor");
        }
    }

     继承与合成结合起来使用:

    public class PlaceSetting extends Custom {
        Spoon sp;
        Fork frk;
        Knife kn;
        DinnerPlate pl;
    
        public PlaceSetting(int i) {
            super(i + 1);
            sp = new Spoon(i + 2);
            frk = new Fork(i + 3);
            kn = new Knife(i + 4);
            pl = new DinnerPlate(i + 5);
            System.out.println("PlaceSetting constructor");
        }
    
        public static void main(String[] args) {
            PlaceSetting x = new PlaceSetting(9);
        }
    }
    
    class Plate {
        public Plate(int i) {
            System.out.println("Plate constructor");
        }
    }
    
    class DinnerPlate extends Plate {
        public DinnerPlate(int i) {
            super(i);
            System.out.println("DinnerPlate constructor");
        }
    }
    
    class Utensil {
        public Utensil(int i) {
            System.out.println("Utensil constructor");
        }
    }
    
    class Spoon extends Utensil {
        public Spoon(int i) {
            super(i);
            System.out.println("Spoon constructor");
        }
    }
    
    class Fork extends Utensil {
        public Fork(int i) {
            super(i);
            System.out.println("Fork constructor");
        }
    }
    
    class Knife extends Utensil {
        public Knife(int i) {
            super(i);
            System.out.println("Knife constructor");
        }
    }
    
    class Custom {
        public Custom(int i) {
            System.out.println("Custom constructor");
        }
    }
  • 相关阅读:
    RANSAC算法——RANDOM SAMPLE CONSENSUS
    屏蔽关键词搜索
    全景图拼接——opencv之stitching
    如何 查看本地安装的 .NET Framework(CLR) 版本 方法二亲测可行
    js判断是否是ie浏览器且给出ie版本
    js判断文件大小利用img 的 dynsrc,兼容IE10 及以上
    Java的——String类、StringBuffer和StringBuilder、不可变和可变字符序列使用陷阱
    windows.onload和body的onload属性的区别
    jquery中class选择器的用法,选择两个class
    #JS# 如何判断一个字符串是否为日期格式
  • 原文地址:https://www.cnblogs.com/frankyou/p/6020025.html
Copyright © 2011-2022 走看看