面向对象
类与对象
构造器
性质:
- 和类名相同
- 没有返回值
作用:
- new 本质在调用构造方法
- 初始化对象的值
注意点:
- 定义有参构造后,如果想使用无参构造,必须再定义一个无参的构造
- 没做任何定义之前,默认存在一个无参构造
- 构造函数 类名 对象名 = new 类名(); 不要忘记括号,此为构造方法
this. =
面向对象的三大特征
- 封装
- 继承
- 多态
封装
内部属性private私有
private 定义内部属性
提供外部public的方法
get 获得这个数据
public String getName(){
return this.name;
}
set 给这个数据设置值
public void setName(String name){
this.name = name;
}
可以通过内部的封装让程序变得更安全
public void setAge(int age){
if(age>120||age<0){
this.age = 3;
}else{
this.age = age;
}
}
封装的意义
- 提高程序的安全性,保护数据
- 隐藏代码的实现细节
- 统一接口
- 系统可维护性增加了
继承
extends
- 只有单继承,没有多继承
- private 无法被继承
Object类
Java中所有类的默认继承了Object类
super
public void test(String name){
System.out.println(name); //输入的
System.out.println(this.name); //当前子类中的
System.out.println(super.name); //父类中的
}
public student(){
//super(); 隐藏代码调用了父类的构造
// 而且调用父类的构造器必须在子类构造器的第一行
System.out.println("xxx");
}
注意点:
- super调用父类的构造方法,必须在构造方法的第一个
- super必须只能出现在子类的方法或者构造方法中
- super 和 this 不能同时调用构造方法
final
使用final修饰词后,类就不能在被继承。
重写@override
:需要有继承关系,子类继承父类的方法
注意点:
- 方法名必须相同;
- 参数列表必须相同; 即方法头相同,方法体不同
- 修饰符:范围可以扩大但不能缩小;
- 抛出的异常:范围可以缩小,但不能扩大;
多态
-
即同一方法可以根据发送的对象的不同而采用多种不同的行为方式
-
一个对象的实际类型是确定的,但可以指向对象的引用类型有很多(父类,有关系的类)
-
动态编译:可扩展性更强
-
多态是方法的多态,属性没有多态
public class Person{
public void run(){
System.out.println("father");
}
}
public class Student{
@Override
public void run(){
System.out.println("son");
}
public void eat(){
System.out.println("eat");
}
}
//一个对象的实际类型是确定的
//可以指向的引用类型就不确定了:父类的引用指向子类
//Student 能调用的方法都是自己或者继承父类的!
Student s1 = new Student();
//Person 父类,可以指向子类,但不能调用子类独有的方法
Person s2 = new Student();
Object s3 = new Student();
//对象能执行那些方法,主要看对象左边的类型,和右边关系不大!
((Student)s2).eat();
s1.eat();
//子类重写了父类的方法,执行子类的方法
s1.son(); //--->"son"
s2.son(); //--->"son"
存在条件
- 有继承关系
- 子类重写父类方法
- 父类引用指向子类对象
instanceof 方法
Object obj =new Student();
//Object >> Person >> Student
//在同一条支线上,使用instanceof方法就输出true,否则输出false
System.out.println(obj instanceof Student); //---->true
System.out.println(obj instanceof Object); //---->true
System.out.println(obj instanceof Person); //---->true
System.out.println(obj instanceof String); //---->false
System.out.println(obj instanceof Teacher); //---->false
类型转换
- 父类引用指向子类对象
- 把子类转换成父类,向上转型
- 把父类转换成子类,向下转型,强制类型转换
static
-
static 定义属性和方法,可以直接调用类来使用;否则要创建对象后再调用
-
静态类最先加载
-
非静态方法中可以调用静态方法;但静态方法中只能直接调用静态方法:new Student(),若调用非静态方法需要先使用构造器创建对象然后调用方法: new Student( ). test( );
-
静态代码块
static{
//静态代码块
//只执行一次
}
{
//匿名代码块
}