类和对象
- 声明对象:在内存的栈空间中执行。ImoocStudent student;
- 实例化对象:在内存的堆空间执行。new ImoocStudent();
栈空间、堆空间、方法区空间
- 栈空间:存储的是方法以及局部变量。当方法被执行时,栈内存空间中就会为其分配内存,此时方法就会进入栈空间执行,称为压栈。当方法执行结束后,就会释放空间,称为弹栈,此时方法就会退出栈内存空间。方法一定是压栈和弹栈!
- 堆空间:用于储存java程序中产生的对象。比如在程序中遇到new关键字,就会产生一个对象实例,这个对象实例会被存储在堆内存空间中。
- 方法区空间:保存的是代码片段、常量以及static修饰的变量
一、属性赋值
public class ImoocStudent {
String nickname;
public static void main(String[] args) {
ImoocStudent student = new ImoocStudent();
// 给成员属性赋值
student.nickname = "Colorful";
System.out.println("昵称:" + student.nickname);
}
}
二、构造方法
1、构造方法没有返回类型,并且方法名要与类名同名。
2、如果我们没有定义构造方法,系统会有一个默认的构造方法。换句话说:任何一个类都会有一个构造方法。
根据参数的有无,构造方法可分为两种:
- 无参构造方法
- 有参构造方法
3、无参构造方法,在实例化后,会默认执行
4、有参构造:允许定义多个参数列表不同构造方法。
三、this
封装
一、含义
类的一些特征和行为隐藏在类内部,不允许类外部直接访问。
二、如何封装
- 修改属性的可见性为private;
- 创建公开的 getter 和 setter 方法,分别用于属性的读写;
- 在 getter 和 setter 方法中,对属性的合法性进行判断。
三、不封装
不同类之间实例化对象后,可以随意赋值修改属性
四、封装
1、对要封装的类的属性添加 private
此时外部调用,实例化对象后,属性不能随意修改,如下图
2、对要封装的类添加get、set方法(预留接口)
3、外部调用该类时,调用get、set方法(接口)
继承
1、继承可以使用父类的属性、方法;然后也可以有自己新定义的属性、方法
2、方法重写
- 如果一个类从它的父类继承了一个方法,如果这个方法没有被标记为 final 或 static,就可以对这个方法进行重写。重写的好处是:能够定义特定于子类类型的行为,这意味着子类能够基于要求来实现父类的方法。
- 在要重写的方法上面,可以选择使用 @Override 注解,让编译器帮助检查是否进行了正确的重写。
- 重写方法的参数列表应该与原方法完全相同;
- 返回值类型应该和原方法的返回值类型一样或者是它在父类定义时的子类型;
3、方法重载
方法重载(Overloading)发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。
多态
多种形态,分两种情况:父类引用指向子类对象、子类引用指向父类对象
1、三步
- 满足继承关系
- 要有重写
- 父类引用指向子类对象、子类引用指向父类对象
2、父类引用指向子类对象:向上转型
向上转型就是父类引用指向子类实例,也就是子类的对象可以赋值给父类对象。例如:
Pet dog = new Dog();
3、子类引用指向父类对象:向下转型
参考:
http://www.imooc.com/wiki/javalesson/polymorphism.html
http://t.csdn.cn/VyKcD