zoukankan      html  css  js  c++  java
  • 【西天取经】1、OOP面向对象(C#\JAVA)

    1、OOP面向对象(C#\JAVA)

    关于面向对象的三大特征,可以下载这本书的电子版,在第五章里面有详细的介绍和实例。本书最重要的一章,核心中的核心!

    仔细读完保证让你有本质提升。本书于2009年10出版上市,在那个年代里我写的这本书,绝对是计算机编程书籍里的一股清流。

    想搞明白下面C#和JAVA的面试题结果,需要下载上面的电子书,仔细阅读第五章里面的知识,会让你受益匪的,从此走向人生巅峰。

    面向对象的编程思想不区分你使用的是哪种编程语言,封装、继承、多态的道理都是一样的。

    C#请写出运行结果:(面试题)

       class Person
        {
            protected int Age = 10;
            public Person()
            {
                this.Output();
            }
            public virtual void Output()
            {
                Console.WriteLine("Person:" + this.Age);
            }
        }
        class Employee : Person
        {
            public Employee() : base()
            {
                base.Age = 20;
            }
            public override void Output()
            {
                Console.WriteLine("Employee:" + base.Age);
            }
        }
        class Program
        {
            static void Main(string[] args)
            {
                Employee employee = new Employee();
            }
        }

    JAVA请写出运行结果:(面试题)

    友情提示:JAVA里面没有C#里面的virtual和override关键字(这两个关键字简直就是坑爹的设计,文章结尾处有吐槽)

    public class Person {
        protected int age = 10;
        public Person() {
            this.outPut();
        }
        public void outPut() {
            System.out.println("Person:" + this.age);
        }
    }
    
    public class Employee extends Person {
            public Employee() {
            super();
            super.age = 20;
        }
        @Override
        public void outPut() {
            System.out.println("Employee:" + super.age);
        }
    }
    
    public class CodeDemo {
        public static void main(String[] args) {
            new Employee();
        }
    }

    JAVA类型比较和C#类型比较的特殊之处,请写出下面JAVA代码的运行结果:(面试题)

    public static void main( String[] args ) {
        System.out.println("1" == "1");
        System.out.println("1".equals("1"));
        System.out.println(new String("1") == new String("1"));
        System.out.println(new String("1").equals(new String("1")));
        System.out.println("1" == new String("1"));
        System.out.println("1".equals(new String("1")));
    
        int data1 = 127;
        int data2 = 127;
        System.out.println(data1 == data2);
    
        Integer dataObject1 = 127;
        Integer dataObject2 = 127;
        System.out.println(dataObject1 == dataObject2);
    
        Integer dataObj1 = new Integer(127);
        Integer dataObj2 = new Integer(127);
        System.out.println(dataObj1 == dataObj2);
    
        Integer dataObject11 = Integer.valueOf(127);
        Integer dataObject12 = Integer.valueOf(127);
        System.out.println(dataObject11 == dataObject12);
    
        int int127 = 127;
        System.out.println(int127 == dataObj1);
        System.out.println(dataObj1.equals(int127));
        System.out.println(int127 == dataObject11);
        System.out.println(dataObject11.equals(int127));
    
        data1 = 128;
        data2 = 128;
        System.out.println(data1 == data2);
    
        dataObject1 = 128;
        dataObject2 = 128;
        System.out.println(dataObject1 == dataObject2);
    
        dataObj1 = new Integer(128);
        dataObj2 = new Integer(128);
        System.out.println(dataObj1 == dataObj2);
    
        dataObject11 = Integer.valueOf(128);
        dataObject12 = Integer.valueOf(128);
        System.out.println(dataObject11 == dataObject12);
    
        int int128 = 128;
        System.out.println(int128 == new Integer(128));
        System.out.println(new Integer(128).equals(int128));
        System.out.println(int128 == Integer.valueOf(128));
        System.out.println(Integer.valueOf(128).equals(int128));
    }

    总结:

    JAVA的比较大小是否相等简直就是坑爹的设计,int和Integer的区别很多人都整不明白,即便是整明白这里了,遇到比较临界值127和128的时候,也会让你开始怀疑人生。除了int还有String等很多类型都有各种比较的坑,总结一句话JAVA在类型比较时不如NET,比较大小相等的时候,搞不清楚该怎么用的时候,就用equals方法准没错,如果没有equals方法就先声明它的类型,之后就可以new了,new完了就有equals方法了;高级点的用法就是用valueOf方法得到它的类型然后就有equals方法可以用了。(在整不明白为什么之前,千万别用valueOf方式得到类型的equals方法啊,不然会坑死你的,编程这个职业也是高危职业,弄错了把你送进监狱说不定也是有可能的。)

    多说一句关于继承的知识点:

    C#里面有protected和internal两个访问修饰符,还有virtual和override两个关键字,而在JAVA里面是完全没有的。

    先说C#这两个访问修饰符真的能把你坑得死死的,你想添加一个类型的扩展方法,发现调用类里protected和internal访问修饰符定义的方法根本不行,为了扩展一个功能去重写一个类型,当你这么干的时候,你会发现根本不现实,C#里面这两个访问修饰符完全就是鸡肋,食之无味弃之可惜。反观JAVA这里虽然没有C#里面的扩展方法这个语法糖的优点,但是JAVA里的访问限制可以说基本上是没有的,因为JAVA里面不仅没有internal这个访问修饰符(protected访问修饰符对象可以用),甚至连virtual和override这两个关键字都没有,你可以随便改随便写,你的子类把继承的父类里所有的方法全部重写一遍都是没问题的。再想想C#里面这四个高大上的东西叫什么呢?这就叫做门槛,微软又在你成为高手的必经之路上给你设置了一道非常高的门槛,没有对比就没有伤害。

  • 相关阅读:
    【模板时间】◆模板·III◆ 单调子序列
    【学时总结】◆学时·VII◆ 高维DP
    【例题收藏】◇例题·IV◇ Wooden Sticks
    【赛时总结】◇赛时·VI◇ Atcoder ABC-104
    【例题收藏】◇例题·III◇ 木と整数 / Integers on a Tree
    【学时总结】◆学时·VI◆ SPLAY伸展树
    【模板时间】◆模板·II◆ 树链剖分
    【赛时总结】◇赛时·V◇ Codeforces Round #486 Div3
    【例题收藏】◇例题·II◇ Berland and the Shortest Paths
    【例题收藏】◇例题·I◇ Snuke's Subway Trip
  • 原文地址:https://www.cnblogs.com/xitianqujing/p/12723924.html
Copyright © 2011-2022 走看看