java面向对象编程opp
1.什么是面向对象的编程opp
一、类
就是模板,用来定义对象的属性和方法,比如人、学生、猫都有模板(有共同属性的一些事物放在一起)
类名的首字母大写
class Student{
} //这是一个学生类
class Cat{
}
class Person{
}
二、 对象
类的实例化 (将一个模板,具体到一个物体)
比如: 小明、小张他们都是一个对象也是学生这个类的实例化对象
如何实例化一个类(以学生类为例)
Student student=new Student(); //创建一个新对象=将Student类实例化为student
三、方法
方法是一个语句的集合,在一起完成一个特定的功能。
方法在类中或者对象中,即类方法或者普通方法。
方法的定义
修饰符 返回值类型 方法名 (参数类型 参数名){
//方法体
return 返回值 //返回值是返回到调用方法那里
}
四、继承
子类继承父类的特征和行为,使得子类对象具有父类的方法和属性。
父类也叫基类,具有公共的方法和属性。
五、多态
同一个行为具有不同表现方式
优点:减少耦合、灵活可扩展(代码可以与多种类型产品适用)
一般是继承类或者重写方法的实现
六、抽象
关键词abstract声明的类叫作抽象类,abstract声明的⽅法叫抽象⽅法
⼀个类⾥包含了⼀个或多个抽象⽅法,类就必须指定成抽象类
抽象⽅法属于⼀种特殊⽅法,只含有⼀个声明,没有⽅法体
2.java中面向对象中的构造函数和封装
什么是构造函数:
1. 一种特殊的方法
2. 创建对象用来初始化对象,每次用new创建对象的时候就会使用构造函数
3. 与类具有相同的名称,但是没有返回值
4. Java会为每一个类提供一个默认的构造函数
5. 如果自定义了构造函数,就不再适用默认的构造函数,如果没有显示写出默认的构造函数则会消失
如果构造函数之间互相调用,必须写在方法的第一行。
构造函数的种类:
默认构造函数
public 类名(){
}
无参构造函数
public 类名(){
//自定义语句
}
有参构造函数
public 类名(参数类型 参数名称,参数类型1 参数名称1){
//自定义方法体
}
构造函数修饰符
public 用的最多 用来创建对象
private 私有化构造函数,不给外部创建对象
default 默认的话,只能在当前包里面使用
关于修饰符的详细介绍
什么是封装
1.封装是把过程和数据包围起来,对数据的访问只能通过已定义的接⼝即⽅法
2.在java中通过关键字private,protected和public实现封装。
3.什么是封装?封装把对象的所有组成部分组合在⼀起,封装定义程序如何引⽤对象的数据,
4.封装实际上使⽤⽅法将类的数据隐藏起来,控制⽤户对类的修改和访问数据的程度。
5.适当的封装可以让代码更容易理解和维护,也加强了代码的安全性
类封装
⽅法封装
overload(重载,过载)
在一个类里面方法名字相同,参数不同,和返回类型无关
override(重写,覆盖)【除方法体之外都一样】
返回值类型,⽅法名,参数类型以及个数
⼦类能够根据需要实现⽗类的⽅法
子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变
3. java面向对象核心关键字this讲解
this关键字
1.当一个对象创建后,jvm会给这个对象分配一个引用自身的指针,这个指针就是this
2.只能用于非静态方法,静态方法不能用
3.this就是指向当前对象
使用场景
this(参数类型 参数名 )表示当前类对应的构造函数
方法形参和对象名=的属性重名,用this来区分
this表示当前对象,通过对象可以调用方法和属性
4.java面向对象之继承
继承
⼦类继承⽗类的特征和⾏为,使得⼦类对象具有⽗类的⽅法和属性
格式,通过extends关键字
class ⽗类名称{
}
class ⼦类名称 extends ⽗类名称{
}
特点:
子类拥有父类的非private的属性和方法
子类可以用自己的方式实现父类的方法(override重写)
实现了代码的复用
重写从父类哪里继承的方法,当调用方法的时候会优先调用子类方法(默认就近原则)
)
注意:
1.不支持多继承(一个类,继承两个),但支持多重继承(一个继承一个)
2.所有的类都继承于Java.lang,Object
3.final关键字
修饰这个类,这个类不能被继承
修饰方法,这个方法不能被重写
5.java面向对象之继承super关键字
super关键字
一个引用变量,用于引用父类对象
父类和子类都具有形同的命名方法,需要调用父类方法时使用
父类和子类都具有相同的命名属性,要调用父类中的属性时使用
super也是父类的构造函数
注:调用super必须是类构造函数中第一条豫剧,否则编译不通过
this()和super()都指的是对象,均不可以在static环境中使⽤
包括:static变量,static⽅法,static语句块
构造函数 super和this
1.this和super在构造函数中只有一个,且都必须是构造函数当中的第一行(可以创建一个)
2.当父类的构造函数是无参构造函数时,在子类的构造函数中,不用显示super()调用父类的构造函数
3.当⽗类的构造函数是有参构造函数时,如果⼦类的构造函数中不写super()进⾏调⽤⽗类的构造函数,编译器会报错
6.java之面向对象编程之抽象
什么是抽象
动物都有年龄和名称,但是吃的不⼀样,⽺吃草,⽼⻁吃⾁,但是都是闭着眼睛睡觉的
⻋,都有名称和价格,也有跑的⽅法,但是最⾼速度或者动⼒来源不⼀样
当⽗类的某些⽅法不确定时,可以⽤abstract关键字来修饰该⽅法,即抽象⽅法,⽤abstract
来修饰该类,即抽象类
抽象类将事物的共性的东⻄提取出来,由⼦类继承去实现,代码易扩展、易维护
抽象类的特点
1 . 抽象类不能被实例化,因为抽象类中方法未具体化,(只有方法体,没有代码块)这是一种不完全的类,所以不能直接实例化
2.抽象类不一定包含抽象方法,但有抽象方法必定是抽象类
3.如果一个抽象类可以没有抽象方法,这么做的目的是为了此类不能被实例化
4.抽象类的子类必须给出抽象类中抽象方法的具体实现,否则子类也是抽象类需要用abstract声明
5.抽象类不能使用final关键字声明,因为final修饰的类是无法被继承
抽象方法的特点
1.抽象类中的抽象方法只是声明,不包含方法体
2.抽象方法不能用private修饰因为抽象方法必须通过子类实现(重写)
3.一个类继承了抽象类,那么它必须全部覆写抽象类中的抽象方法,当然也可以不全部覆写,如果不覆写全部抽象方法则这个子类也必须是抽象类
4.构造方法、类方法(static修饰的)不能生命为抽象方法
7.java面向对象之接口
什么是接口
接口:抽象方法的集合接口通常以interface来声明,一个类通过继承接口的方式,从而来继承接口的抽象方法
基本语法
interface 名称 [extends 其他的接⼝名] {
// 声明变量
// 抽象⽅法
}
接口的特点
1.接口的方法都是抽象方法默认 public和abstract其余修饰符都会报错
2.接口中可以含有变量,但接口中的变量会被隐式指定为 public static final
3.类描述对象属性和方法,而接口则包含类要实现的方法
4.接⼝⽆法被实例化,需要被实现才⾏
5.⼀个实现接⼝的类,必须实现接⼝内所描述的所有⽅法,否则就必须声明为抽象类
接⼝和类的区别
* 接⼝没有构造函数
* 接⼝⾥可以有静态⽅法和⽅法体
* 接⼝中所有的⽅法必须是抽象⽅法(JDK8之后就不是)
* 接⼝不是被类继承了,⽽是要被类实现
* 接⼝⽀持多继承, 类不⽀持多个类继承
- 接⼝的实现implements
- 当类实现接⼝的时候,类要实现接⼝中所有的⽅法,不然类必须声明为抽象的类,使⽤
implements关键字实现所有接⼝
class 类名 implements 接⼝名称[, 其他接⼝名称, 其他接⼝名称]{
//要实现的⽅法
}
``
JDK8新特性
1.interface中可以有static⽅法,但必须有⽅法实现体,该⽅法只属于该接⼝,接⼝名直接调⽤该⽅法
2.接⼝中新增default关键字修饰的⽅法,default⽅法只能定义在接⼝中,可以在⼦类或⼦接⼝中被重写
default定义的⽅法必须有⽅法体
3.⽗接⼝的default⽅法如果在⼦接⼝或⼦类被重写,那么⼦接⼝实现对象、⼦类对象,调该⽅法,以重写准
4.本类、接⼝如果没有重写⽗类(即接⼝)的default⽅法,则在调⽤default⽅法时,使⽤⽗类定义的default⽅法逻辑
8.java面向对象编程之instanceOf关键字和多态
InstanceOf 关键词
public interface IPay{
// static修饰符定义静态⽅法
static void staticMethod() {
System.out.println("接⼝中的静态⽅法");
}
// default修饰符定义默认⽅法 ,默认⽅法不是抽象⽅法,可以不重写也可以重写
default void defaultMethod() {
System.out.println("接⼝中的默认⽅法");
}
}
// static⽅法必须通过接⼝类调⽤
IPay.staticMethod();
//default⽅法必须通过实现类的对象调⽤
new IPay().defaultMethod();
是Java的⼀个⼆元操作符(运算符),也是Java的保留关键字
作⽤
判断⼀个类是否实现了某个接⼝,或者判断⼀个实例对象是否属于⼀个类
语法
对象类型强制转换前的判断
⽅法重写和重载
⽅法重写 overriede
⼦类对⽗类的允许访问的⽅法的实现过程进⾏重新编写,
注意点
返回值和形参都不能改变
⽗类的成员⽅法只能被它的⼦类重写
final 和 static的⽅法不能被重写
构造⽅法不能被重写
访问权限不能⽐⽗类中被重写的⽅法的访问权限更低
⽅法重载 overload
⼀个类⾥⾯,⽅法名字相同但参数不同,返回类型可以相同也可以不同
⽐如构造函数重载
注意核⼼区分
override是在不同类之间的⾏为,overload是在同⼀个类中的⾏为
总结:Java多态
同⼀个⾏为具有多个不同表现形式或形态的能⼒
//如果该object 是该class的⼀个实例,那么返回true。如果该object 不是该class的
⼀个实例,或者object是null,则返回false
boolean result = object instanceof class
参数:
result :boolean类型。
object :必选项。任意对象表达式。
class:必选项。任意已定义的对象类。
常⻅的⽅式
继承⽅法重写
同类⽅法重载
抽象⽅法
接⼝