面向对象的特征:
封装性:创建了类的对象以后,直接通过"对象.属性"的方式对相应对象的属性赋值,可能出现不满足实际情况的要求,通过"对象.方法"形式控制对象性的访问,根据对属性的要求
简单总结:类的属性私有化,公共方法来调用
所以有构造器和构造方法,设置属性权限为private
权限修饰符:
private :只能类的内部
缺省(没有修饰符): 类内部+同一个包
protected: 类内部+同一个包+子类
public:任何地方
构造器和构造方法
构造器作用:
-
创建对象
String str = new String(“h1”)
设计类时,如不声明类的构造器的话,程序会默认提供一个空参的构造器
Person p= new Person()一旦显式定义的构造器,那么默认的构造器就不会再提供
声明:权限修饰符 类名(形参){}
多个构造器之间构成重载
2.给对象赋值
this关键字
- 可以修饰属性,方法,构造器
- 当前对象或当前正在创建的对象
构造器中 this.name = name, 当前调用的对象调用,将其值传递给当前对象的属性
要求:1.在构造器内部必须声明在首行
2.一个类中有n个构造器,最多有n-1个构造器中使用了this
JavaBean
javaBean是一种java语言写成的可重用组件
满足条件:
类是公共的
有一个无参的公共构造器
有属性,且有对应的get和set方法
UML的类图:
第一个类名:属性:属性类型
方法有下划线:表示有构造方法
+public
-private
"#"表示protected
继承
明确:当父类中有私有的属性或方法时,子类同样可以获取到,只是由于封装性的设计,使得子类不可以直接调用罢了
方法的重写
1.前提 有子类继承父类
2.子类继承父类以后,父类的方法对子类不适用,那么子类可以对父类的方法重写,
3.规则:子类的返回类型 方法名 参数类型 一样
子类的修饰符不能小于父类方法的修饰符
父类方法抛出异常,子类方法抛的异常不能大于父类
子父类的方法必须同为static或者非static
super关键字
-
子类与父类中有同名属性时,可以通过"super.属性",显式调用父类中声明的属性,
-
子类重写父类的方法之后,子类中想显式调用父类被重写的方法,“super.方法”
-
super修饰构造器,通过子类中使用"super(形参列表)"显式调用父类中指定的构造器
构造器内部:super(形参列表) 必须在声明的首行
this和super只能出现一个 -
不使用super和this的时候,默认调用父类空构造 super()
多态性
事物的多种表现形态
- 方法的重写
- 子类对象的多态性:父类引用执行子类对象实体
子类对象多态性使用的前提:1.类的继承2.子类对父类方法的重写
对于多态性来说:编译时"看左边",将引用变量理解为父类的类型
运行时"看右边",关注于真正对象的实体,子类的对象,那么执行的方法就是子类的重写
向上转型
Person p1 = new Man();
向下转型
Man p2 = (Man)p1; 向下转型时可以通过instanceOf进行判断,使用强转符
不属于类的编译时抛出 java.lang.ClassCastException:类型转换异常
equals方法
==
1.基本数据类型,根据基本数据类型的值,判断是否相等,数据类型可以不同
2.引用数据类型:比较的是地址值,堆空间的首地址
equals:java.lang.Object类
源码
public boolean equals(Object obj){
return(this == obj)
}
仍然是==
但是String类重写了Object类的equals方法,比较的是两个对象里面的内容