码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础 —— 面向对象

时间:2015-03-07 17:02:04      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

面向对象的程序设计:

  1. 基本特征:抽象性,封装性,继承性,多态性。

  2. 类及成员的访问控制:private:同一类中;  default:同一包中;  protected:子类中;  public:全部;

  3. 继承 --> [访问控制修饰符] class <子类名> extends <父类名> { 子类体 }

    规则:1) 不支持多重继承。

       2) 只继承非private成员变量及方法。

       3) 子类会覆盖同名的父类函数。

       4) 可以实现子类到父类的"向上转型",实现多态。

  4. super关键字:可以访问被子类成员隐藏的父类成员,也可以调用父类的构造方法。

    构造方法调用规则:1) 按继承关系自上而下调用。

             2) 如果子类没有构造方法,那么会默认调用父类的无参构造方法。如果父类没有无参的构造方法,则会出错。

             3) 如果子类有构造方法,则先执行父类的构造方法,在执行子类的构造方法。

             4) 若用super调用含参数的构造方法,则必须写在首句。

  5. 多态:子类对象可以替代父类对象使用,即先声明父类的对象,再用子类实例化,便可以访问子类的同名方法(不包括子类的属性)。

    主要分为方法的重载和覆盖:

      --> 方法重载的规则:参数的个数不同、参数的类型不同、或参数的顺序不同,与返回值无关。(发生在同一类中)

      --> 方法覆盖的规则:子类对父类方法进行重定义,但方法名、返回值和参数形态完全一样,且不能缩小访问权限。(发生在继承中)

  6. 对象造型:对象以父类声明,对子类的新加入成员访问受限,则可以使用强制类型转换的方式,恢复对子类成员的访问权限。

    条件:1) 子类到父类的类型转换可以隐式完成。

       2) 在多态的情况下,从父类到子类的转换一定需要造型。

       3) 无继承关系的引用类型之间的转换是非法的。

  7. instance of:用于检测一个对象的真正类型,包括其子类,父类。

  8. 协变返回类型:即允许子类重写时修改方法的返回值,但一定是重写前返回值类型的子类或实现类。

  9. 方法重载与多重匹配:由转换开销决定,一般往更复杂的方向转换时开销较少。(如 short可以匹配byte,也可以匹配int,此时会优先匹配int)

 

高级类特性:抽象类,接口,嵌套类和枚举类型:

  1. 抽象类:[访问控制修饰符] abstract class <类名> {

        成员变量;

        一般方法(){}

        抽象方法();

      }

    规则:1) 可以包括具体的方法,也可以包括抽象方法。

       2) 抽象方法只能写在抽象类内。

       3) 抽象类可以由构造方法,但是没有实例,只能通过子类进行实例化。

       4) 对于类,不能同时使用final与abstract来声明;对于成员方法,不能同时使用static与abstract声明。

  2. 接口:[访问控制修饰符] interface <接口名> [extends <父接口名列表>] {

        常量;

        抽象方法();

      }

    规则:1) 可以继承多个父接口。

       2) 默认所有成员变量都是public,static和final的。

       3) 默认所有成员方法都是public和abstract的。

       4) 接口只包括常量定义和抽象方法。

       5) 接口的访问权限只有public和default。

    特点:接口可以多重实现,也可以多重继承。

    与抽象类的区别:1) 多重继承。

            2) 抽象类可以存在包含具体实现的成员方法,而接口则没有。

            3) 接口不是类体系的一部分。

            4) 具有可插入性。

    如果:(1) 父类已经有实现的同名方法。

       (2) 这个类是抽象类。

    这时,不需要实现接口中的所有方法。

  3. 嵌套类:与成员方法类似,在嵌套类中可以访问其他外层类的成员,包括private成员。

 

public class TestInners {
    public static void main(String[] args) {
        A a = new A();
        A.B b = a.new B();  //B为内部类,需要依赖A的对象才能实例化
        b.mb();
     }
}

    匿名内部类:

public class TestAnnoymous2 {
    public static void main(String[] args) {
        TestAnonymous2 ta = new TestAnonymous2();
        ta.test(new Swimmer(){  //使用匿名内部类,实现了Swimmer接口的swim方法
            public void swim() {
                System.out.println("I’m Swimming!");
            }
        });
    }    
    public void test(Swimmer swimmer) {
        swimmer.swim();
    }
}

interface Swimmer {
    public abstract void swim();
}

  4. 泛型:[访问控制修饰符] class 类名<参数类型列表> [extends] [implements] {}  --> 实现了类型参数化,避免了强制类型转换。(之后会详细展开)

  5. 异常处理:所有的异常类都实现了Throwable接口。分为Error和Exception两种类型。Error是指JVM系统内部错误,资源耗尽(严重)。Exception又分为编译时异常和运行时异常,一般是由变成错误或偶然的外在因素导致。(之后会详细展开)

    异常举例(不全):

      LinkageError: .class文件在连接时不存在(被移动或者已删除)。

      VirtualMachineError:应用程序递归太深,栈内存溢出(空间耗尽)。

      NullPointerException:空指针异常。

Java基础 —— 面向对象

标签:

原文地址:http://www.cnblogs.com/Bestsonic/p/4320509.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!