黑马程序员--面向对象学习---接口、多态、内部类、异常

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

 

3.final关键字:final是一个修饰符,可以修饰类,方法,变量;final修饰的类不可以被继承;final修饰的方法不可以被覆盖;final修饰的变量是一个常量,只能复制一次。

4.抽象类:抽象类不可以实例化;抽象类必须有子类覆盖其所有抽象方法后才可以实例化;abstract不可以与privatestaticfinal关键字共存。抽象类可以定义抽象方法,也可以定义非抽象方法。抽象类可以有构造方法,用于对子类属性初始化。

5.接口:接口的方法都是抽象的,变量都是全局常量,成员都是公共的权限.java不支持多继承,但是可以多实现.接口可以多继承.原理在于方法体是否存在.抽象类的继承是is a关系,在定义该体系的基本共性内容,接口的实现是like a关系 ,在定义体系额外功能.

6.多态:父类或者接口的引用指向之类的对象,提高了代码的扩展性。不能调用子类的特有内容。多态的前提:必须有继承或实现,要有覆盖。Animal a = new Cat();向上转型,将子类型特有属性隐藏,不能使用子类特有的方法,a不能访问Cat的特有功能。Cat c = (Cat)a;向下转型,为了使用子类的特有功能。对于转型,子类对象在做着类型的变化。Instanceof:用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前,用于健壮性的判断。成员变量,编译和运行都参考等号的左边,Fu f = ZI(); f调用成员变量是父类的。成员方法(非静态):编译时看f的引用类型,去Fu类找show方法,若不存在则编译失败,运行是看引用指定的对象;存在动态绑定,编译看左边,运行看右边,如果zi类的show方法不存在则,调用父类的,因为继承的关系,

图示:

静态方法:存在静态代码块中,不依赖对象调用;非静态方法需要动态绑定,依赖对象。编译和运行都看左边,其实对于静态方法是不需要对象的,直接用类名调用。

7.内部类:内部类可以直接访问外部类的成员,外部类要访问内部类,必须建立内部类的对象;直接访问内部类的的成员(private,非static)Outer.Inner In = new Outer().new Inner();如果是静态内部类:Outer.Inner in = new Outer.Inner();如果内部类是静态的,成员是静态的可以直接调用:Outer.Inner.function();如果内部类中定义静态成员,该内部类必须定义为静态的;内部类可以直接访问外部类的成员:内部类持有外部类的引用。局部内部类访问局部成员时需要把成员声明为finnal类型:

class Outer{

         int  num = 3;

         void method(){

                   finnal int x = 5;

                   class Inner{

                            void show(){

                                     System.out.println("show..." + x);

                            }

                   }

         }        

}

        

内部类在局部位置上只能访问局部中被finnal修饰的局部变量。

8.匿名内部类:内部类必须继承或实现一个外部类或接口,一个匿名子类对象,格式:new父类(或接口名){}; 当函数是借口类型时,而且接口中的方法不超过三个,可以使用匿名内部类作为实际参数传递。

9.Object 类中的equalsobj)方法,接受Object对象,比较对象的地址,内部是通过比较(this==obj)实现的。

10.异常:Throwable有两个子类:ErrorExceptionError特点:是有jvm抛出的严重性问题,这种问题发生一般不针对性处理,直接修改程序。Jvm先检查语法错误,再检查异常。Throw用在方法内,抛出的是异常对象,throws 用于方法声明,抛出的是异常类,可以抛出多个,。异常的分类:编译时被检测异常(Exception和其子类除了RuntimeException体系),希望在编译时就进行检查,做针对性处理;运行时异常,这种问题的发生无法让功能继续,运算无法进行,更多是因为调用者的原因导致的或者引发了内部状态的改变导致的,问题一般不处理。异常是jvm正常运行期间抛出的异常。自定义异常时要么继承Exception要么继承RuntimeException

11.catch父类的catch放在最下边;异常处理的原则:1.函数内容如果抛出需要检测的异常,那么函数上必须要声明。否则必须在函数内用try扑捉,否则编译失败。2.如果调用到了声明异常的函数,要么try要么throws,否则编译失败。3.功能内容可以解决异常,用catch,解决不了用throws告诉调用者去解决。4.若抛出多个异常需要多个catch针对处理。Finnally代码块通常用于关闭资源,如果catch里边有system.exit退出虚拟机则finnally不执行。没catch就没有处理,try finally组合中没有catch,需要声明抛出。

 

Void show() throws Execption{

Try{

     //开启资源

     Throw new Execption():

}

Finally{

     //关闭资源

}

}


对于try代码块中,执行到有异常语句时则跳转到catch去处理,try代码块中异常语句后边的代码不再执行;只有try中发生异常才回去catch中找相应的处理,如果没有则报错。

注意事项:1.子类在覆盖父类的方法时,父类的方法如果抛出异常,那么子类只能父类异常或该异常的子类。2.如果父类抛出多个异常,那么子类只能抛出父类异常的子集。3.如果父类的方法没有抛出异常,那么子类覆盖方法时绝对不能抛出异常,如果有异常需要处理只能try。多catch时,父类的catch放在最下边。

12.jar包:通过设置classPath后可以直接使用

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值