2017/2/25
今天学习一下面向对象: 封装、继承、多态.
1 面向对象之封装
封装就是两层含义: 第一就是将属性和方法封装成对象, 第二就是实现信息隐藏, 部分信息对外不可见(可通过权限限制).
2 面向对象之继承
单继承、提高代码复用率、提高软件开发效率.子类初始化时会先去调用父类的无参构造方法, 如果没有编译器会自带.用super()调用父类的构造方法只能放在程序的第一行.子类继承父类时会继承全部的属性和方法, 虽然有可能没有权限访问.
3 面向对象之多态
允许重名、方法重载、成员覆盖、提高抽象程度、提高简洁程度.
=======================================================================================
类与对象: 对象是实际存在在该类中的实体.
Test t; 只是分配了栈内存, 注意只有new Test()的时候才会分配堆内存,并完成指向.
匿名对象只使用一次, 并没有任何引用指向它, 之后就会被java的垃圾回收器处理掉.
构造方法
1 具有与类名相同的名称
2 无返回值
实际是在用javac编译程序时, 如果没有声明的构造方法, 系统会默认生成一个空参的构造方法.
构造方法的私有化: 无论生命多少对象, 得到的都是同一个引用, 此类只产生一个实例对象.(单例模式)
对象的比较
"==" 与equals(): 前者比较两个对象的内存地址是否相同 后者比较两个对象的内容是否相同.
this关键字
this指代当前对象、this调用无参构造方法this()
static 关键字
静态变量对象共享、节省内存、还可以用来计算产生了多少实例对象
main()方法
public static void main(String args[])
静态代码块
类载入事静态代码块先执行,且只执行一次, 经常用来对类属性初始化. 静态代码块优先于静态方法
对象也可以放到数组里面.
内部类
可以减少内存开销, 但是会破坏程序结构, 避免使用.
外部类无法找到内部类的属性, 而内部类可以找到外部类的属性, 用static声明的内部类就变成了外部类, 但是不能访问非static的外部类属性.
只要将内部类声明为public就可以被外部调用.
在方法中也可以定义内部类, 但是只能访问方法中的final的局部变量, 因为final修饰的局部变量相当于一个常量, 超出方法的运行周期.
复写
子类复写父类中的方法时, 不能有比父类高的访问权限.
抽象类; 抽象类也可以有构造方法, 但是这些构造方法必须被子类明确调用.
final关键字
1 final修饰的类不能被继承
2 final修饰的方法不能被复写
3 final修饰的变量是常量,只能赋值一次.
接口
接口体现了java的一种多继承机制, 一个类只能继承一个类, 却可以实现多个接口.
向上转型: 父类的引用指向子类的对象, 无需强制转化, 会丢失精度.
向下转型: 需要强制转化.向下转的前提是一定之前有了向上转化.instanseOf