【1】封装
1 封装可以理解为一个保护屏障,防止该类的代码和数据被外部代码随便访问;要访问该代码必需通过严格的接口控制;
2 最主要的功能在于是我们自己能实现代码,而不用修改那些调用我们代码的程序片段; 即一个对象修改自己的属性和方法,可以自己完成,不需要依赖其他对象就可以独立完成;
【2】继承
作用:多个类中存在相同的方法和属性时,我们可以将这些进行抽取到单独一个类中,那么多个类就可以不用再定义这些属性和方法;
具体操作:
1) Java中只能单继承但可以多实现;
//一个类只能有一个父类,不可以有多个父类。
class
SubDemo
extends
Demo{}
//ok
class
SubDemo
extends
Demo1,Demo2...
//error
2)
- 如果类之间存在着:is a 的关系,就可以考虑使用继承。
- 不要为了继承部分功能,而去使用继承。
- 3)
- super和this的区别
- super代表当前子类对父类的引用, 当父类中出现和子类同名的成员时 要调用父类的时可以用super 当子类需要调用父类的构造函数时可以用 super()但 他们都必须写在方法的第一行
- this代表对象的引用(谁调用就代表谁,可以理解为所在函数所属对象的引用)
-
1.成员变量
12this
.变量 -- 本类的
super
.变量 -- 父类的
2.构造方法
super();和this();都是在构造函数的第一行,不能同时出现12this
(...) -- 本类的
super
(...) -- 父类的
3.成员方法
12this
.方法名() -- 本类的
super
.方法名() -- 父类的
-
方法的重写
当子类中出现和父类一模一样的方法时(访问权限大于或者等于且不包括private, 指返回类型,方法名,参数相同)时会出现重写操作;
父类私有方法,子类看不到,因此父类私有方法的重写也就无从谈起
注意事项: 重写方法时子类一定要大于父类;
静态只能覆盖静态;
使用场景:子类需要父类的功能,而功能主体,子类有自己的特有内容,(毕竟父类有多个子类对吧;不是为你一个子类所定义功能,那么就会存在有些功能有些子类并不满足,所以重写可以添加 比如equals() hashCode() 我们要重写该方法的主体)
而此时)
Final关键字
可以修饰类,成员变量,成员方法;
它修饰了类不能被继承;
它修饰的成变量是一个常量;
被final修饰的常量名称,所有字母都
大写
它修饰的成员方法不能被重写;
【3】多态
概念:对象在不同时刻表现出的形态; 解决了父类中不能使用子类的方法,
前提:
需要继承或者实现关系
要有方法的重写
父类对象引用指向子类对象
作用: 解决了父类中不能使用子类的 向上转型,就是父类对象,可以调用 子类重写了父类的方法访;
向下转型(也就是强制类型转换) 就又可以变成子类的对象咯;毕竟变成父类对像不能访问子类没重写的方法 这就是对像的多种形态;
小小解释一下 :
public class School {
public static void main(String[] args) {
sayHello(new Student());
sayHello(new Teacher());
sayHello(new Worker());
}
public static void sayHello(Person s){
s.why();;
}
}
public static void main(String[] args) {
sayHello(new Student());
sayHello(new Teacher());
sayHello(new Worker());
}
public static void sayHello(Person s){
s.why();;
}
}
在学校里 调用SayHello(Person s) (Person父类哦) 然后每个人有不同的响应,对吧,都重写了why()方法
这样就集中管理了,比每个人都一个一个调用自己的why()方法,减少了很多代码; 这就是他的向上转型的魅力:
想要拓展性高一点的话,对象直接放到一个集合里面,然后直接遍历出来;
向下转型的魅力呢?就是我们创建一个监听器什么的,Servlet类什么的,过滤器什么的,要继承或者一些类;而这些类是父类;在一些方法里面参数类型也是父类; 有些功能只有子类才有,所以要向下转型了 比如:ServletRuquest 的对象不能得到session对象:而子类HttpServletRequest能得到;你说要不要强转呢: