java.1
java.lang不用import
在多态下,引用和对象可以是不一样的类型,一般引用变量是对象的父类
final表示继承树的末端,修饰类的时候,类不能被继承,修饰方法的时候方法不能被重写,修饰的变量为常量
非公有类只能被同一个包里面的类继承
方法的覆盖,子类的方法参数必须完全一样,返回值要兼容(与父类相同或者是父类的子类),覆盖子类的方法要比父类权限更加开放或者一样
重载,其实就是名字一样的两个方法,参数要不一样,返回值没有限制,这里参数的不一样还包括的参数的顺序,很神奇!
接口
抽象类
不能被实例化的类,但是可以作为引用类型!!!
抽象类除了被继承以外,别无他用
抽象类中可以有抽象的和非抽象的方法
abstract class classname{}
抽象方法
抽象方法必须被覆盖,有抽象方法的类一定要标记成抽象类
public abstract void eat();
抽象方法存在的意义就是为了多态!!!
为子类定义出了共同的协议
object---java.lang.object
object类使所有类的终极父类
getclass()告诉你对象是从哪里被初始化的
编译器是通过引用的类型来判断有哪些方法可以调用,而不是对象的类型
你把子类多态定义为父类,只能看到父类中定义过的那些方法
x instanceof Y 变量x是类Y的一个实例
java不允许多重继承,一个子类只能继承一个父类,避免了致命方块的问题
接口
java接口中所有的方法都是抽象的!就好像100%抽象方法发抽象类
public interface name{..}
public class x implements name{...}
一个类可以在继承的基础上再去实现接口,并且可以同时实现多个接口。记得要重写接口中的每一个抽象方法
不同的继承数可以实现相同的接口
只要实现的相同的接口,这些类就可以在这个接口的基础上完成多态的通用
super关键字用来引用父类的方法
堆与栈
对象是被放在堆上的
实例变量是放在对象中的,也就是在堆中,是在类的方法之外定义的变量
而局部变量是在栈中的,是类方法本身的局部变量或参数
如果局部变量是一个对于对象的引用,只有局部变量本身在栈上,引用的对象仍然在堆上
构造函数是没有返回值与类的名字一样!构造函数不会被继承
对于实例变量而言,他们是有默认值的0/0.0/false/null
继承的构造函数的调用顺序,从下往上一次调用然后从下往上依次执行!,最终的效果是先执行父类的构造函数在执行子类的构造函数
注意!对于编译器而言,他只会调用父类发没有参数的构造函数,也就是super()!super()只能在构造函数的第一行执行
可以使用this()来调用同一个类的其他的构造函数,注意super()和this()不能同时使用,this()同样只能放在第一行
实例变量的生命周期与对象的生命周期相同,对象的生命周期要看他的引用变量。一个对象没有引用了,或者他的引用的生命周期结束,那么这个对象就会被回收
静态方法
一个静态方法的意思是说 他不依赖于实例变量,只依赖于传入的参数
把构造函数设置为私有的,可以拒绝非抽象类被初始化,那么这个类你只能调用它的静态方法了。