多态:(polymorphic)
父类引用指向子类对象
成员变量:编译看左边(父类)运行看左边(父类)
成员方法:编译看左边(父类)运行看右边(子类).动态绑定
静态方法:编译看左边(父类)运行看左边(父类)
多态的弊端:父类引用不能使用子类中特有的成员变量或方法
多态的好处:a.提高代码的复用性(继承保证)
b.提高代码的扩展性(由多态保证)
---------------------------------------------------------------
抽象:
abstract不能喝哪些关键字共存
abstract和static
被abstract修饰的方法没有方法体
被static修饰的可以用类名.调用,但是类名.抽象方法没用意义
abstract和final
被abstract修饰的方法需要子类进行重写
被final修饰的方法不能被重写
abstract和private
被abstract修饰的方法需要子类进行重写
被private修饰后对子类来说是不可见的
-------------------------------------------------------------
接口(interface)
成员变量:只能是常量并且是静态的并公共的
默认修饰符:public static final
建议自己手动给出
构造方法:接口没有构造方法
成员方法:只能有抽象方法
默认修饰符:public abstract
建议手动给出
接口与接口之间是继承关系,可以单继承也可以多继承
接口与抽象类的区别
成员属性:接口中只有常量没有变量
抽象类中可以有常量也可以有变量
成员方法:接口中所有的方法都是抽象的
抽象类中可以有抽象方法,也可以没有抽象方法
构造方法:接口中没有构造方法
抽象类中有构造方法
继承:接口可以单继承也可以多继承
抽象类只能可以单继承
--------------------------------------------------------------
内部类:
B:内部类访问特点
* a:内部类可以直接访问外部类的成员,包括私有。
* b:外部类要访问内部类的成员,必须创建对象。
局部内部类访问局部变量必须用final修饰
局部内部类在访问他所在方法中的局部变量必须用final修饰,为什么?
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,
当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,
如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,可以继续使用;
但是jdk1.8取消了这个事情,所以我认为是个bug
匿名内部类格式:
new 类名或者接口名(){
重写方法;
}
非静态内部类:外部类名.内部类名 变量名 = new 外部类对象.new 内部类对象
静态内部类:外部类名.内部类名 变量名 = new 外部类名.内部类对象
局部内部类:外部类名 变量名 = new 外部类对象 变量名.内部类所在方法;
匿名内部类一般只重写一个方法时使用
.
匿名内部类不能向下转型,因为没有子类类名;
--------------------------------------------------------
访问权限修饰符
四种:private 私有
默认
protected 受保护的
public 公有的
同一包中:
两个类之间有继承关系:默认 protected public 可以访问
两个类之间没有继承关系:默认 protected public 可以访问
不同包中:
两个类之间有继承关系: protected public 可以访问
两个类之间没有继承关系: pulic 可以访问
---------------------------------------------------------
包:
定义包的格式
package 包名;多级包用.分开
定义包的注意事项
package 语句必须是程序的第一条可执行的代码
package 语句在一个java文件中只能有一个
如果没有package,默认表示无包名
如何编译运行带包的类
javac编译的时候带上-d即可
示例:javac -d . HelloWorld.java
通过java命令执行
示例:java 包名.HelloWorld
----------------------------------------------------------
* A:修饰符:
* 权限修饰符:private,默认的,protected,public
* 状态修饰符:static,final
* 抽象修饰符:abstract
* B:类:
* 权限修饰符:默认修饰符,public
* 状态修饰符:final
* 抽象修饰符:abstract
* 用的最多的就是:public
* C:成员变量:
* 权限修饰符:private,默认的,protected,public
* 状态修饰符:static,final
* 用的最多的就是:private
* D:构造方法:
* 权限修饰符:private,默认的,protected,public
* 用的最多的就是:public
* E:成员方法:
* 权限修饰符:private,默认的,protected,public
* 状态修饰符:static,final
* 抽象修饰符:abstract
* 用的最多的就是:public
* F:除此以外的组合规则:
* 成员变量:public static final
* 成员方法:
* public static
* public abstract
* public final |
|