前言:前面我们了解了C语言,是一门面向过程的语言;现在我们进入Java学习,这是一门面向对象的程序的语言,在C语言的基础之上增添了许多更便利的方法。
面向对象的特征有哪些呢?
- 封装:将对象属性和方法的代码封装到一个模块中,也就是一个类中,保证软件内部具有优良的模块性的基础,实现“高内聚,低耦合”。
- 抽象:找出一些事物的相似和共性之处,然后归为一个类,该类只考虑事物的相似和共性之处。抽象包括行为抽象和状态抽象。
- 继承:在已经存在的类的基础上进行,将其定义的内容作为自己的内容,并可以加入新的内容或者修改原来的方法适合特殊的需要。
- 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,就是多态,简单点说:就是用父类的引用指向子类的对象。目的:提高代码复用性,解决项目中紧耦合问题,提高可扩展性。
- 多态的机制:靠的是父类的或者接口的引用变量可以指向子类或者具体实现类的实例对象。
下面我们来进行介绍
目录:
- 一、类与对象
- 二、方法
- 三、继承
- 四、多态
一、类与对象
描述一种东西需要太多太多词汇,为了方便描述,所以把这些词汇放在一起; 这种东西叫做类,这种东西里面的个体叫做对象,描述个体的词汇叫做属性;
1.类
类:把众多是事物归纳、划分成一些是人类在认识客观世界时经常采用的思维方式。分类的原则是抽象的。类是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如同模具与铸件的关系,类的实例化的结果是对象,而对一类对象的抽象就是类。
2.对象
对象:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。对象由属性和对属性进行操作的一组服务组成。
3.类与对象的关系
对象是类实例化出来的,对象中含有类的属性,类是对象的抽象;
举例:人类 -> 马云 那么马云即为人类这个类里面的一个对象;人类有许许多多的属性,如性别、年龄、财产... 这些都是人类这个类里面的属性,而马云性别男,年龄56,财产百亿就是这个属性的具体化;
4.代码表示
//University 大学类
public class University {
public String University_Name; //校名属性
public String Admitted_Score; //录取分数属性
public String Province; //所在省份属性
public University(String university_Name, String admitted_Score, String province) {
University_Name = university_Name;
Admitted_Score = admitted_Score;
Province = province;
}
}
//大学类里面的一个对象 西南大学SWU
public class SWU {
University SWU = new University("西南大学","620","重庆");
}
二、方法(杂)
1.对对象属性赋值的方式
a.对于public修饰的属性使用对象直接使用
b.对于private修饰的属性不能直接使用只能间接作用
2.类方法与对象方法
Java是面向对象的语言 一切皆对象 类,Java里面方法是不能独立存在的
类方法 = 静态方法
对象方法 = 实例方法
-
区别:
定义区别 -> 静态方法 使用static修饰
意义区别 :
静态方法:依附于类本身,比实例方法优先加载,只能用这个类来调用当这个类被加载到内存中,这个方法就被加载了,而此时对象还不存在 所以只能用这个类来调用静态方法
对象方法:依附于对象,必须创建这个类的一个对象,用对象来调用
static可以修饰以下内容
- 变量 静态变量
- 方法 静态方法
- 类(内部类) 静态内部类Java参数传递机制:值传递(传递过去的是当前变量的一份拷贝)
3.构造方法与方法重载
-
构造方法:如何去创建一个对象
系统默认提供一个无参的构造方法
public class University {
public String University_Name;
public int Admitted_Score;
public String Province;
public University(){ //默认构造 构造初始数据
University_Name = "xx";
Admitted_Score = 111;
Province = "北京";
}
public University(String university_Name, int admitted_Score, String province) { //自定义构造
University_Name = university_Name;
Admitted_Score = admitted_Score;
Province = province;
}
}
1.默认构造方法(构造一个对象,属性为默认构造的数据)
public class BD {
public static void main(String[] args){
University BD = new University();
System.out.println(BD.Admitted_Score);
}
}
2.自定义构造
public class SWU {
public static void main(String[] args){
University SWU = new University("西南大学",620,"重庆");
System.out.println(SWU.University_Name+SWU.Admitted_Score+SWU.Province);
}
}
方法重载
同一个类里面 方法名相同 参数一定不同
方法的重载和返回值 修饰符 没有关系
public class Car {
public int WheelCount;
public int Engine;
public int Seat;
//在同一个 Car 类, 方法名都为Car,但里面参数不同 这就是Car方法重载
public Car(){
}
public Car(int cWheel, int cEngine, int cSeat){
WheelCount = cWheel;
Engine = cEngine;
Seat = cSeat;
}
}
特点:方法名和类名相同 没有返回值
解决两个问题:让代码更简洁 在数据使用时能保证有数据
对象方法与静态方法
set与get方法
用于private修饰属性的调用 用ALT+INSERT键快速调用(Windows) Ctrl+ENTER(MacOS)
三、继承
什么是继承呢,可以凭字面意思理解,通俗的将就是平时生活中的继承 爸爸继承爷爷,儿子继承爸爸;继承了些什么呢,为人处事的方法,财产,人脉关系;在JAVA中只不过是继承东西的名字变了而已,下面我们进行了解。
1.为什么要用到继承
继承有许多好处,我们再从字面意思上理解,人为什么要继承,因为父辈已经有的东西为什么不要而去重新打拼呢?在Java里这样理解,已经写好了一个类A,我们要另起一个类B,但这B的大部分功能就是A,为什么不在A的基础上进行编写B呢,那么就可以将B继承于A。这样可以很大程度上减轻代码的臃肿性,对应代码编写原则:高内聚。
2.继承的格式
class 父类 {
}
class 子类 extends 父类 {
}
3.继承的类型
继承类型.png
4.继承的特点
①.子类拥有父类非 private 的属性、方法。
②.子类可以拥有自己的属性和方法,即子类可以对父类进行扩展。
③.子类可以用自己的方式实现父类的方法。
④.Java 的继承是单继承,但是可以多重继承,单继承就是一个子类只能继承一个父类,多重继承就是,例如
⑤.A 类继承 B 类,B 类继承 C 类,所以按照关系就是 C 类是 B 类的父类,B 类是 A 类的父类,这是 Java 继
⑥.承区别于 C++ 继承的一个特性。
⑦.提高了类之间的耦合性(继承的缺点,耦合度高就会造成代码之间的联系越紧密,代码独立性越差)。
5.重写
若子类中需要的方法与父类冲突则需要进行重写
@override 父类Car与子类BMW演示 将drive方法重写
public class Car {
public int wheel;
public String color;
public String brand;
public Car(int wheels){
//System.out.println("Car类构造方法");
this.wheel = wheels;
drive();
}
protected void drive() {
System.out.println("color:"+color);
}
}
public class BMW extends Car{
public BMW(int wheels) {
super(wheels);
}
@Override
protected void drive() {
System.out.println("开宝马舒适");
}
public void test(){
System.out.println("宝马贵");
}
}
- 输出结果为 “开宝马舒适” 而不是 “color:颜色” 重写成功
- 重写要点
两同:方法名相同 参数相同
两小:子类的返回值必须比父类的想用或更小 子类抛出的一场必须比父类抛出的要小
一大:子类的修饰符要比父类更大或者相同
6.继承关键字
-
1.extends关键字
在 Java 中,类的继承是单一继承,也就是说,一个子类只能拥有一个父类,所以 extends 只能继承一个类。
public class Animal {
private String name;
private int id;
public Animal(String myName, String myid) {
//初始化属性值
}
public void eat() { //吃东西方法的具体实现 }
public void sleep() { //睡觉方法的具体实现 }
}
public class Penguin extends Animal{
}
-
2.super与this
super关键字:实现对父类成员的访问,用来引用当前对象的父类。
this关键字:指向自己的引用。 -
3.final关键字
final 关键字声明类可以把类定义为不能继承的,即最终类;或者用于修饰方法,该方法不能被子类重写. - 7.继承注意事项
①.尽量让属性的修饰符为private
②.尽量让属性的修饰符为private 或者 final ->表示这是一个常量 不能被更改 通常用大写字母表示
③.尽量不要在父类的构造方法里面调用可能被子类重写的方法
四、多态
-
关键字 goToWork
将同一个事件的不同方法集合在一起,不用繁琐创建子类 一个goToWork搞定;
public class Father {
public void goToWork(Car car){
car.drive();
//判断某个类是不是一个类
if(car instanceof BMW){
BMW bmw = (BMW)car; //多态 强制转化为对应的子类对象
bmw.test();
}
if(car instanceof Aodi){
Aodi aodi = (Aodi)car;
((Aodi) car).test2();
}
}
}
- 多态只能子类向父类转
- 在使用的时候,如果需要使用子类的方法或者属性,必须强制转化为对应的子类对象
- instanceof: 判断某个对象是不是某个类的对象