面向对象编程(OOP)
面向对象编程的本质:以类的方式组织代码,以对象的形式组织(封装)数据
抽象
三大特性
-
封装
-
继承
-
多态
非静态方法之间可以互相调用不用new对象,但是在静态方法里面无法直接调用非静态方法,原因是静态方法是和类一起加载的,非静态方法是在类实例化之后才存在的,相当于一个已经存在的方法调还没存在的方法
构造器
-
没有返回值,必须和类名相同
-
使用new关键字,本质是在调用构造器
-
用来初始化值
-
一旦定义了有参构造,想使用无参构造,就必须显示定义一个无参构造
-
this. 代表当前类的....
类与对象
-
类与对象:
-
类是一个模版:抽象,对象是一个具体的实例
-
-
方法
-
定义、调用
-
-
对应的引用
-
引用类型 : 基本类型(8)
-
对象是通过引用来操作的,栈-->堆
-
-
属性:字段field 成员变量
默认初始化
-
数字:0,0.0
-
char:u0000
-
boolean:false
-
引用:null
修饰符 属性类型 属性名=属性值!
-
-
对象的创建和使用
-
必须使用new 关键字创造对象,构造器 Person wenji=new Person()
-
对象的属性 wenji.name()
-
对象的方法 wenji.sleep()
-
-
类
-
静态的属性 属性
-
动态的行为 方法
-
封装
高内聚、低耦合
属性私有:get/set
继承
-
子类继承父类,就会拥有父类的全部方法
-
变量的修饰符:public、protect、default、private
-
在java中所有的类都直接或间接继承object
-
java中只有单继承,没有多继承
-
私有的东西无法被继承
-
调用父类的构造器,必须要在子类构造器的第一行
super
-
super调用父类的构造方法,必须在构造方法的第一个
-
super必须只能出现在子类的方法或者构造方法中
-
super和this不能同时调用构造方法
this和super的区别
代表的事物不同
-
this:本身调用者这个对象
-
super:代表父类对象的应用
前提
-
this在没有继承也可以使用
-
super只能在继承条件下才可以使用
构造方法
-
this():本类的构造
-
super():父类的构造
方法重写
重写都是方法的重写,和属性无关
-
需要有继承关系,子类重写父类的方法
-
参数列表必须相同
-
修饰符:范围可以扩大:public>protect>default(默认)>private 比如父类是protected,子类可以是protected,public
-
抛出的异常:范围,可以被缩小,但不能扩大:ClassNotFoundException--》Exception(大)
重写,子类的方法必须和父类一致,方法体不同
//静态方法
public class A extend B{
@Override
public static void test(){
System.out.println("A->test");
}
}
public class B{
public static void test(){
System.out.println("B->test");
}
}
public class C{
public static void main(String[] args){
A a=new A();
a.test();
B b=new A();
}
}
//非静态方法
public class A extend B{
@Override
public void test(){
System.out.println("A->test");
}
}
public class B{
public void test(){
System.out.println("B->test");
}
}
public class C{
public static void main(String[] args){
A a=new A();
a.test();
B b=new A();
}
}
静态方法和非静态方法调用区别很大
-
静态方法:方法调用只和左边定义的数据类型有关,类的方法
-
非静态方法:重写,调用的是对象的方法,对象是用子类new出来的,对象的方法
静态方法只能被继承不能被重写
多态
-
一个类的实际类型是确定的,但是可以指向的引用类型就不确定了,父类的引用指向子类
Student s1=new Student();
Person s2=new Student();
Object s3=new Student();
注意事项
-
多态是方法的多态,属性没有多态
-
父类和子类,有联系,类型转换异常!ClassCastException
-
存在条件:继承关系方法, 需要重写,父类引用指向子类对象
-
static 方法,属于类,它不属于实例
-
final 常量
-
private 方法
-
把父类转换为子类,向下转型,强制转换
-
方便方法的调用,减少重复的代码,简洁