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()同样只能放在第一行

实例变量的生命周期与对象的生命周期相同,对象的生命周期要看他的引用变量。一个对象没有引用了,或者他的引用的生命周期结束,那么这个对象就会被回收

静态方法

一个静态方法的意思是说 他不依赖于实例变量,只依赖于传入的参数

把构造函数设置为私有的,可以拒绝非抽象类被初始化,那么这个类你只能调用它的静态方法了。

原文地址:https://www.cnblogs.com/Coder-Pig/p/6243208.html