zoukankan      html  css  js  c++  java
  • Java复习5.面向对象

    Java 复习5面向对象知识 20131004

    前言:

             前几天整理了C++中的面向对象的知识,学习Java语言,当然最重要的就是面向对象的知识,因为可以说Java是最正宗的面向对象语言,相比C++,更加严格的面向对象的语言。面向对象是JAVA语言最大的特点。

    1.基本概念

    面向对象在程序中开始指的是采用封装、继承、抽象的设计方法,如今以发展到整个软件行业,如OOA(面向对象分析), OOD(面向对象设计), OOP(面向对象的编程)。

    面向对象的特点:

    对象的唯一性,每一个对象都会有一个唯一的标识,通过标识,可以找到相应的对象,在对象的整个生命周期内对象的标识不会变化。

    抽象性:将相同的数据结构和操作方法抽象成类

             继承性:类之间是可以集成的,使用关键字 extends ,同时可以实现多个接口使用关键字implements

             多态性:同一种方法对于不同的类有不同的表现方式;

             封装性:将对象的属性和操作封装起来,当做一个整体对象,而不必公开对象的属性和操作。

    2.Java中的抽象类使用 abstract关键字实现,其中在抽象类中,需要有抽象方法,使用关键了abstract关键字声明方法是抽象方法,这种抽象方法需要在子类中实现,除非子类也是抽象类。抽象类是不可以直接实例化,只有抽象类中才可以使用abstract关键字修饰方法为抽象方法。

    3对于Java程序中可以使用不同package下面的同一个名称的类,但是使用的时候,需要使用全名,确定使用的是那一个包下面的类,否则会产生二义性,编译无法通过。

    4.Java中是不支持多重继承的,继承使用的关键字是extends关键字,继承除了父类的static变量和函数之外,都是继承下来,但是因为访问权限,所以可能在子类中无法访问。

    调用父类的构造方法使用关键字super(参数);

             在子类中可以使用关键字super访问父类中的方法。

             继承的时候是将父类中的所有的属性和方法都继承下来(除了static 方法和属性),这样如果在子类中重新声明的属性和变量,就会将子类的覆盖掉,但是数据结构中任然存在父类的属性,我们这里的覆盖知识作用域上的覆盖,而是不是将值覆盖掉。

    public  class Chou {

        protected int a = 10;

        Chou(int a){this.a =a ;}

        void getA(){System.out.println("Chou: a = " + this.a);}

    }

    public class Zilei extends Chou {

        protected int a = 13;

        Zilei(int a) {

            super(a);this.a = a*2;

        }

        void getA() {

            System.out.println("Chou: a = " + super.a);

            System.out.println("Zilei: a = " +this.a);

        }

    }

    在C++中使用的是父类的名字作为作用域访问。

    class Base{

    protected:

        int a;

        Base(int a){

            this->a = a;

        }

    public:

        virtual void getVal() = 0;

    };

    class Derived: public Base{

    protected:

        int a;

    public:

        Derived(int a):Base(a),a(a*2){}

        void getVal(){

            cout << "Base : a= " << Base::a << endl;

            cout << "Derived : a=" << this->a << endl;

        }

    };

    5.继承,多态,重载,重写, 覆盖

        回忆一下曾经整理的C++的重载,重写,覆盖,比较麻烦,所以最好这些知识,今天在学习Java,不存在覆盖的情况,所以比较简单。同时首先解决一个问题就是参数传递不匹配的情况。

    首先是C++中:

    int add(int a, int b){

        cout << "a=" << a << ",b = " <<  b << endl;

        return a+b;

    }

    Main:

    double a = 1.2, b = 1.3;

    add(a,b);这样是允许编译的,编译的时候会出现waring,提示从double转换成int会丢失精度。如果想高精度转换的话,不会产生waring和error。

    在Java中低精度向高精度转换的话,不会出错,但是高精度转换成低精度的,编译不通过。

    public static double add(double a, double b){

    System.out.println("a="+a + ",b = " + b);

    return a+b;

    }

    int a = 1, b = 2; add(a,b);这样是可以的,但是反过来是不可以的。

        在Java中有重载,就是函数的参数类型、数目,顺序不同,这样的函数是在编译期间决定的,叫做静态绑定;而重写是在Class继承中的,叫做重写,这样的话,是在运行期间绑定的,叫做动态绑定,实现类的多态机制。

    6.Java中的接口

        在C++中是没有怎么使用接口,所以接口的概念比较淡,但是在Java中,只支持单继承,所以接口的作用就十分重要了。接口需要类实现使用关键字implements,在一个class中可以实现多个接口。

        定义接口:接口就是只负责声明,不负责实现的,一旦定义一个接口,他可以被任何class实现,在接口中的内容有两种:

        抽象方法,全部都是使用public abstract 修饰的,即使我们不适用关键字修饰的话,也是public abstract 修饰的,不可以改变,保证可以被任何类实现。

        常量:一定是常量,不可能存在变量,而且是静态的,final,public

        同时接口一定是public修饰的,不可以是其他的修饰符。

    追梦的飞飞
    于广州中山大学 20131004
    HomePage: http://yangtengfei.duapp.com  

  • 相关阅读:
    我所理解的readonly和const
    代码中的良好习惯从点滴做起
    常用正则表达式收集
    优化网站加载速度的14个技巧
    关于easyUI的模态对话框
    关于jq ajax封装以及ajax上传Webapi
    Linux完全卸载Oracle的操作步骤
    Linux下安装oracle的一般步骤
    CentOS Linux上安装Oracle11g笔记
    Oracle中建库时报Exception in thread main
  • 原文地址:https://www.cnblogs.com/hbhzsysutengfei/p/3409522.html
Copyright © 2011-2022 走看看