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关键字用来引用父类的方法
堆与栈
对象是被放在堆上的
实例变量是放在对象中的,也就是在堆中,是在类的方法之外定义的变量
而局部变量是在栈中的,是类方法本身的局部变量或参数
如果局部变量是一个对于对象的引用,只有局部变量本身在栈上,引用的对象仍然在堆上