zoukankan      html  css  js  c++  java
  • 2020年8月17日 关于继承的练习题(面试题)

    public class Test02 {
        public static void main(String[] args) {
            Father f = new Father();
            Son s = new Son();
            System.out.println(f.getInfo());
            System.out.println(s.getInfo());
            s.test();
            System.out.println("-----------------");
            s.setInfo("大硅谷");
            System.out.println(f.getInfo());
            System.out.println(s.getInfo());
            s.test();
        }
    }
    class Father{
        private String info = "atguigu";
        public void setInfo(String info){
            this.info = info;
        }
        public String getInfo(){
            return info;
        }
    }
    class Son extends Father{
        private String info = "尚硅谷";
        public void test(){
            System.out.println(this.getInfo());
            System.out.println(super.getInfo());
        }
    }

     运行结果:

    atguigu
    atguigu
    atguigu
    atguigu
    -----------------
    atguigu
    大硅谷
    大硅谷
    大硅谷

    package com.atguigu.homewok.test03;
    
    public class Test03 {
        public static void main(String[] args) {
            Father f = new Father();
            Son s = new Son();
            System.out.println(f.getInfo());
            System.out.println(s.getInfo());
            s.test();
            System.out.println("-----------------");
            s.setInfo("大硅谷");
            System.out.println(f.getInfo());
            System.out.println(s.getInfo());
            s.test();
        }
    }
    class Father{
        private String info = "atguigu";
        public void setInfo(String info){
            this.info = info;
        }
        public String getInfo(){
            return info;
        }
    }
    class Son extends Father{
        private String info = "尚硅谷";
        public void setInfo(String info){
            this.info = info;
        }
        public String getInfo(){
            return info;
        }
        public void test(){
            System.out.println(this.getInfo());
            System.out.println(super.getInfo());
        }
    }

     运行结果:

    atguigu
    尚硅谷
    尚硅谷
    atguigu
    -----------------
    atguigu
    大硅谷
    大硅谷
    atguigu

    package com.atguigu.homewok.test04;
    
    /*
     * 属性没有多态性
    多态性现象:编译时类型与运行时类型不一致 * 属性都是按照编译时类型处理的。
    */ public class Test04 { public static void main(String[] args) { A a = new B(); System.out.println(a.num);//a编译时类型就是A 1 System.out.println(((B)a).num);//编译后,因为a被强制成B类,是B类型 2 System.out.println(((A)((B)a)).num);//编译后,a转成B又转成A,是A类型 1 System.out.println("-------------------"); B b = new B(); System.out.println(b.num);//b编译时类型就是B 2 System.out.println(((A)b).num);//b被强制升级为A类型,按A类型处理, 1 System.out.println(((B)((A)b)).num);//b先转A又转B,最终是B类型 2 } } class A{ int num = 1; } class B extends A{ int num = 2; }
    package com.atguigu.homewok.test06;
    
    /*
     * 实例初始化的过程:
     * (1)父类的实例初始化
     * <init>(){
     *         x = 10;//父类的x
     *         this.print();//子类的print,因为this代表的是正在创建的子类对象,而子类重写了print,所以是子类的print'
     *                 System.out.println("Son.x = " + x);//子类的x  没有赋值x=0
            x = 20;//父类的x
     * }
     * (2)子类的实例初始化
     * <init>(){
     *         x = 30;//子类的x
     *         this.print();//子类的print
     *             System.out.println("Son.x = " + x);//子类的x  已经赋值x=30
            x = 40;//子类的x
     * }
     */
    public class Test06 {
        public static void main(String[] args) {
            Father f = new Son();
            System.out.println(f.x);//编译时是Father类型,访问Father中的x   x=20
        }
    }
    class Father{
        int x = 10;
        public Father(){
            this.print();
            x = 20;
        }
        public void print(){
            System.out.println("Father.x = " + x);
        }
    }
    class Son extends Father{
        int x = 30;
        public Son(){
            this.print();
            x = 40;
        }
        public void print(){
            System.out.println("Son.x = " + x);
        }
    }
    package com.atguigu.homewok.test07;
    
    /*
     * (1)类的初始化
     * <clinit>(){
     *         int x = 5;//局部变量
            x--;//局部变量        x=4
     *         Test07.x--;//静态变量      x = -1
     * }
     * (2)执行main方法
     * System.out.println("x=" + x);//静态变量   -1
     * z--;//静态变量   z=-1
     * method();
     *         y = z++ + ++z;//静态变量   
     *             ①先加载z的值“-1”②z自增,z=0③z自增 z =1④加载z的值“1” ⑤求和  “-1” + “1” = 0⑥把0赋值给y   y=0
     * System.out.println("result:" + (z + y + ++z));
     *             ①加载z的值“1”  ②加载y的值"0" ③z自增  z=2 ④加载z的值“2”  ⑤求和  “1” + “0” + “2”
     * 
     */
    public class Test07 {
        static int x, y, z;//类变量,静态变量,成员变量   默认值0
    
        static {
            int x = 5;//局部变量,因为赋值,所以是局部变量
            x--;//局部变量
        }
    
        static {
            x--;//静态变量
        }
    
        public static void main(String[] args) {
            System.out.println("x=" + x);//静态变量
            z--;//静态变量
            method();
            System.out.println("result:" + (z + y + ++z));//静态变量
        }
    
        public static void method() {
            y = z++ + ++z;//静态变量
        }
    }
    package com.atguigu.homewok.test08;
    
    /*
     * 1、Base b1 = new Base();
     * 父类的实例初始化,和子类无关
     * 
     * <init>(){
     *         method(100);
     *             System.out.println("base : " + i);  base:100
     * }
     * 
     * 2、Base b2 = new Sub();
     * (1) 父类的实例初始化
     * 
     * <init>(){
     *         method(100);//执行了子类重写的method()
     *             System.out.println("sub : " + j);  sub:100
     * }
     * 
     * (2)子类的实例初始化
     * <init>(){
     *         super.method(70);
     *             System.out.println("base : " + i);    base:70
     * }
     */
    public class Test08 {
        public static void main(String[] args) {
            Base b1 = new Base();
            Base b2 = new Sub();
        }
    }
    
    class Base {
        Base() {
            method(100);
        }
    
        public void method(int i) {
            System.out.println("base : " + i);
        }
    }
    
    class Sub extends Base {
        Sub() {
            super.method(70);
        }
    
        public void method(int j) {
            System.out.println("sub : " + j);
        }
    }
    public class Test09 {
        public static void main(String[] args) {
            Other o = new Other();
            new Test09().addOne(o);
            System.out.println(o.i);
        }
        
        //o是引用数据类型,实参给形参的是地址值,那么形参修改了属性,实参也会修改
    //o变量的值不能修改,不是说i的值不能修改
        public void addOne(final Other o){
            o.i++;
        }
    }
    class Other{
        public int i;//默认值0
    }
    package com.atguigu.homewok.test02.day10;
    
    /*
     * 实例初始化的过程:
     * (1)父类的实例初始化
     * <init>(){
     *         System.out.print("1");
     * }
     * (2)子类的实例初始化    
     * <init>(String name){
     *         System.out.print("3");
     *         father = new People(name + " F");//创建了一个父类的对象
     *             调用父类的<init>(String name){
     *                     System.out.print("2");
     *             }
     * }
     * 
     */
    public class Test02 {
        public static void main(String[] args) {
            new Child("mike");
        }
    }
    
    class People {
        private String name;
    
        public People() {
            System.out.print("1");
        }
    
        public People(String name) {
            System.out.print("2");
            this.name = name;
        }
    }
    
    class Child extends People {
        People father;
    
        public Child(String name) {
            //隐含了super()
            System.out.print("3");
            father = new People(name + " F");
        }
    
        public Child() {
            System.out.print("4");
        }
    }
    package com.atguigu.homewok.test07.day10;
    
    /*
     * new A(new B());
     * (1)new B()
     * <init>(){
     *         System.out.println("B");
     * }
     * (2)new A(B的对象)
     * <init>(B b){
     *         this();
     *                 System.out.println("A");
     *              System.out.println("AB");
     * }
     */
    public class Test07 {
    
        public static void main(String[] args) {
            new A(new B());
        }
    }
    
    class A {
        public A() {
            System.out.println("A");
        }
    
        public A(B b) {
            this();
            System.out.println("AB");
        }
    }
    
    class B {
        public B() {
            System.out.println("B");
        }
    }
  • 相关阅读:
    程序员:不要自称为码农
    SpringBoot对静态资源配置
    LeetCode 572. Subtree of Another Tree(子树)
    LeetCode 437. Path Sum III(统计路径和等于sum的路径数量)
    LeetCode 112. Path Sum(判断路径和是否等于一个数)
    LeetCode 617. Merge Two Binary Trees(归并两棵二叉树)
    LeetCode 226. Invert Binary Tree(翻转二叉树)
    Failure to transfer org.apache.maven.plugins:maven-resources-plugin:pom:2.6 的解决办法
    linux-查询某软件的安装的目录
    WebService概念解释
  • 原文地址:https://www.cnblogs.com/douyunpeng/p/13518785.html
Copyright © 2011-2022 走看看