内部类详解:
-
成员内部类:
注:(1)成员内部类中不能存在任何static的变量和方法; (2)成员内部类是依附于外部类的,所有只有先创建了外部类才能创建内部类;
-
静态内部类:
静态内部类与非静态内部类的区别:非静态内部类在编译完成后会隐含的保存着一个引用,该引用是指向创建其的外部类;而静态内部类没有;(1)静态内部类的创建不依赖于外部类,可以直接创建; (2)静态内部类不可以使用任何外部类的非static成员变量和方法,而内部类可以; 静态内部类中 外部类的创建语法为: 外部类.内部类 内部类对象=new 外部类.内部类();
-
方法内部类:
方法内部类定义在外部类的方法中,方法内部类只能在该方法中被使用,出了该方法就会失效。(1)局部内部类不允许使用访问权限修饰符 Public、private、protected均不允许; (2)局部内部类对外完全隐藏,除了创建这个类的方法可以访问它,其他的地方是不允许访问的。 (3)局部内部类若想使用 方法形参,该形参必须用final 修饰(jdk8后形参为隐式形参)
-
匿名内部类:没有名字的方法内部类;
(1)匿名内部类是没有访问修饰符的; (2)匿名内部类必须继承一个抽象类或者实现一个接口; (3)匿名内部类不能存在任何静态成员或方法; (4)匿名内部类是没有构造方法的,因为其没有类名; (5)符合方法内部类的所有约束;【上述(1)(2)(3)】
继承
- 继承:子类继承父类所有的结构,但是能不能使用取决于访问修饰符(public private等)
- 继承使用关键字 extends
class 子类 extends 父类
子类与父类定义了相同的方法(覆写),则在子类中用this.方法()时;调用的是子类的方法;
而父类为super.方法名 ;
子类对象在进行实例化前一定会首先实例化父类对象;默认调用父类的构造方法后再调用子类构造方法进行子类对象初始化;
注意:(1)在子类的构造方法中,隐含了一个语句super();
(2)若父类里没有提供无参构造,则此时必须使用super()明确指明需要调用的父类构造方法;
Java只允许单继承,不允许多重继承。(即一个子类只能继承一个父类),但允许多层继承;如:class A extends B;class B extends C ;class C{}
覆写:子类定义了与父类相同的方法或属性的时候,称为覆写;
-
方法的覆写:子类定义了与父类方法名称、参数类型以及个数完全相同的方法。但是被覆写不能拥有比父类更严格的访问控制权限。
注:当前使用的对象是通过哪个类new的【谁new的,则调用的是谁的方法】 访问修饰权限:private<default<public 若父类的方法使用private定义,则表示该方法只能被父类使用,子类无法使用;子类若定义了与父类名称及参数类型个数相同的方法时,表示这个方法只是子类定义的新方法,和父类没有任何关系
-
重载(overload)与覆写(override)的区别:
重载
(1)方法名称相同,参数的类型及个数不同
(2)一个类
(3)没有权限要求覆写
(1)方法名称、返回值类型、参数类型及个数完全相同
(2)继承关系
(3)被覆写的方法不能拥有比父类更严格的访问控制权限 -
super是子类访问父类的操作;而this是本类的访问处理操作;
this:
(1)概念: 访问本类中的属性和方法;
(2)查找范围:先查找本类,若本类没有则调用父类;
(3)表示当前对象
super:
(1)由子类访问父类中的属性、方法;
(2)直接调用父类;
final
- 使用final修饰类、方法、属性;
- final成员变量必须在声明的时候初始化或者在构造器中初始化,否则会报编译错误;
- 使用fina定义的类不能有子类;
- final一旦修饰一个类后,该类的所有方法默认都会加上final修饰。(不包括成员变量)
- 使用final定义的方法不能被子类所覆写;
- 使用final定义的变量就变成常量, 常量必须在声明时赋值,并且不能被修改;
- 定义常量:public static final ,常量全用大写字母,多个单词用_分割;
数据类型转换
使用+ - * / %运算操作时,遵循如下规则:
(1)只要两个操作数中有一个是double类型的,另一个将会被转换成double类型,并且结果也是double类型;
(2)两个操作数有一个是float类型的,另一个会被转换成float型,并且结果也是float型;
(3)两个操作数有一个是long类型的,另一个会被转换成long类型,并且结果是long类型;
(4)否则(操作类型为byte short int char),两个数都会被转换成int型;
但是final修饰的域类型不会发生变化;
多态
- 方法的多态性:
- 方法的重载:
- 方法的覆写
- 对象的多态性
- 对象的向上转型:父类 父类对象=子类实例
- 对象的向下转型(强制) 子类 子类对象=(子类)父类实例
- 不是所有的父类对象都可以向下转型:若想进行向下操作前,一定要首先发生向上转型,否则在转型上出现异常;
- 向下转型存在隐患,则应该先进行判断,后在进行转型;
子类对象 instanceof 类 (返回boolean类型) - 总结:
(1)对象多态性的核心在于方法的覆写
(2)通过对象的向上转型可以实现接受参数的统一,向下统一可以实现子类扩充方法的调用;
(3)两个没有关系的类对象是不能进行转型的;会出现异常。