【西天取经】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#里面这四个高大上的东西叫什么呢?这就叫做门槛,微软又在你成为高手的必经之路上给你设置了一道非常高的门槛,没有对比就没有伤害。

posted @ 2020-04-18 08:24  八_戒  阅读(195)  评论(0编辑  收藏  举报