学习编程也有三年了,还是对面向对象中的一些基础的知识了解的不是很深刻,最近抽出时间又一次巩固了一下,特此总结一下。
1.为什么静态方法无法访问非静态成员
因为静态方法属于类,非静态成员属于对象,所以静态方法将不知道关于其所属类的对象的信息
2.为什么非静态方法可以访问静态成员
非静态成员的生命周期被静态成员生命周期包含,因此当非静态成员存在的时候,静态成员绝对存在。故非静态成员在任何时候都可以访问静态成员
3.Final变量的注意事项
1.final的成员变量必须为其初始化
2.对于原始类型,一旦赋值以后,该值就不能修改,
3.对于引用类型,一旦赋值以后,将不能重新来引用另外一个对象,然而可以修改其引用对象的成员变量
4.final局部变量,可以只声明而不初始化,一旦初始化值不能被修改
5.当final修饰类时,其含义是该类不能再被拆分,任何其他类都不能继承final修饰的类
6.同样方法修饰的方法,也是这样,子类将不能重写该方法,只能继承
4.为什么要有静态变量的存在
因为总有一些方法,行为与结果不依赖于对象的状态
5.成员访问修饰符
可见性 |
public |
protected |
默认 |
private |
对同一个类 |
是 |
是 |
是 |
是 |
同包中的任何类 |
是 |
是 |
是 |
否 |
包外所有非子类 |
是 |
否 |
否 |
否 |
包中子类继承访问 |
是 |
是 |
是 |
否 |
包外子类继承访问 |
是 |
是 |
否 |
否 |
6.抽象类与抽象方法
1.抽象方法只能存在于抽象的类中,非抽象类中不能存在抽象方法
2.抽象方法的声明,是没有方法体的。最后用分号结束。
3.抽象类中的非抽象方法往往是抽象类所有未来子类所具有的。且不会因为子类的不同而具体实现不同的方法。
4.当某类继承自抽象类时,如果其本身不是抽象类,则必须实现所继承抽象类中的抽象方法。
5.抽象类只能继承一个父类,但是可以实现多个来自任何地方的接口
6.抽象类中必须有一个无参数的构造函数,默认会有一个,但是如果定义新的话,会覆盖。
8.接口
1.接口中只能定义常量属性,这样才能保证实现接口的任何类都可以访问相同的属性,不能动态将其值随意修改。
2.接口中方法与不能用static和final修饰
3.接口只能继承接口,不能继承类
9.构造器执行流程
1.一旦编写了任意一个构造器,无论是否是有参数的构造器,系统都不会再提供默认的无参数的构造器。
2.构造器是不能被继承的
3.创建子类时,会走父类中默认的构造函数,无论子类创建的时用的是哪个构造函数