一、面向对象的概念
面向对象的程序设计就是一种更符合我们思考习惯的方式。
二、面向对象的特性
面向对象具有抽象、封装、继承、多态的特性。其中封装、继承、多态是面向对象的三大特性。
1、封装
1.1、封装:隐藏对象的属性和实现细节仅对外提供公共的访问方式。
注:不允许外部直接赋值,仅对外提供公共的访问方式。
1.2、访问修饰符:private、默认、protected、public。
修饰符 | 同一个类 | 同一个包 | 子类 | 所有类 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | |
默认 | √ | √ | ||
private | √ |
1.3 get()/set()方法
由于外界无法直接赋值,提供一些方法用于变量赋值和获取变量。get()方法用于获取值,set()用于赋值。
注:使用get()方法,方法名必须以get开头,后加对应变量的变量名,且变量名首字母大写;set()类似。
2、继承
2.1 、继承:子类继承父类的特征和行为,使用关键字extends。语法格式:
class父类{
}
class子类 extends 父类 {
}
注:继承不到的私有成员,通过gets访问。
2.2继承的优点:①复用原代码
②利用原有类,扩展它的属性和方法
③所有类都直接或间接继承java.lang.Object类
缺点:类与类之间有高耦合性。
2.3 final 修饰得类不能被继承,但可以继承其他类。
2.3方法重写:父类不满足子类需求时,子类重写父类方法。(final 修饰的方法不可以被重写)
方法重写时:
·方法名与形参列表必须一致。
·子类的权限修饰符必须要大于或者等于父类的权限修饰符。
·子类的返回值类型必须要小于或者 等于父类的返回值类型。
·父类方法的返回值所属类型如果时基本数据类型,子类重写时,返回值类型必须与父类完全一致。
3、多态
3.1、多态:同一个方法的调用,可能由于对象不同而有不同的行为。
3.2、 多态的实现:在父类和继承该父类的一个或者多个子类对某些方法的重写。
3.3、引用数据类型转换;
(1)、向上转型(父类引用指向子类):父类类型 变量名=子类对象;
(2)、向下转型(子类引用指向父类):子类类型 变量名=(子类类型)父类对象。
三、面向对象的编程
1、类:一个Java文件可以有多个类,但最多只能有一个public修饰的类,并且这个类的类名必须与文件名完全一致,必须遵守大写字母开头的驼峰规则。
(1) 创建类的代码:
package com.yyds.unit3.demo;
public class DemoObject{
}
class Entity1{
}
class Entity2{
}
(2) 定义类的具体信息:类主要由字量和方法组成。
变量定义格式: 修饰符 变量类型 变量名 =[默认值];
方法定义格式: 返回值类型 方法名(形参列表){}
四、对象的创建和使用
创建的格式:类名称 对象名称=new 类名称();
成员变量的默认值:成员变量存在默认值
byte , short ,int ,long ,char的默认是0
float ,double的默认是0.0
布尔类型的默认值是false
char类型的默认值为“\u0000“
引用类型的默认值是null
五、构造方法
1.1、构造方法也称作构造器(constructor):
(1)、无返回类型,且不写void
(2)、方法名必须与类名一致
1.2、构造方法的调用必须通过new调用:
修饰符 类名(形参列表){}
2.1 构造方法的重载(参数可以有1个或多个,也可以没有)
3.1 this关键字:当成功创建一个对象后,JVM会动态地分配一个引用,该引用指向的就是当前的对象,这种就称作this。它就是在成员方法或者构造方法中使用,用来调用当前对象的成员变量、成员方法或构造方法,代表当前对象。
注:成员方法中不能使用this关键字调用构造方法,使用时,必须出现在构造方法的第一行。
4.1 static关键字
1、静态变量(类变量):在类中,与成员变量同级的用static修饰的变量。优于对象存在。一般static和final(final为一个修饰符,用来修饰类、类中的属性、方法及局部变量,不能修饰构造方法,final修饰的变量只能被赋值一次)一起使用,定义全局的常量。
静态方法:用static修饰的方法,同样属于类,优于对象存在,使用类名.方法名调用。
5.1 包
1、包的定义:通过package关键字声明,包名不能以Java开头。语法格式:
package空格+包名;
2、 类的访问与导包
当使用一个类时,这个类与当前程序在同一个包中,可以省略包名直接使用,当不是一个包时,必须导入包,使用import导入包。
六、super 关键字
super 可以理解为直接父类对象的引用。super访问父类中被子类覆盖的方法或属性(除private修饰的之外),它的作用是解决父类与子类中属性、方法重名的问题。
例如子类与父类重名时:
super-->访问父名
this----->访问本类的名
七、Object 类
java.com.Object类时Java中所有类的父类。
Object类的常见方法:
1、toString()方法:返回该对象的字符串表示形式。
2、equals()方法:比较两个对象的地址是否相同。
3、hashCode()方法:计算一个对象的Hash码值。若一个类重写了equals()方法,就必须重写hashCode()方法。
八、抽象类
1、父类无法准确知道子类的实现方法为抽象类。用关键字abstract实现,语法格式:
权限修饰符 abstract class类名{}
权限修饰符 abstract 返回值类型 方法名(参数列表);
注:抽象类不能创建对象;
抽象方法无方法体,只有声明;
抽象方法必须被子类重写,抽象类被子类继承·时,不能用final连用;
抽象类不能被实例化。
九、接口
1、 接口是比抽象类还抽象的抽象类。接口中只允许抽象方法。使用关键字interface修饰,语法格式:
interface 接口名[extends 父接口1,父接口2,……]{
//常量定义
//方法定义
}
2、类与类之间只有单继承,类与接口之间允许有多现实。要实现多个接口时,用逗号隔开:
class 类 implements 接口1,接口2{
}
3、接口的继承:接口也允许继承,并且接口之间的继承允许多继承。
4、接口的新增:static和default方法,它们允许接口的方法有方法体。语法格式:
public interface 接口{
static void method1(){
}
default void method1(){
}
}