JAVA复习之面向对象编程

在这里插入图片描述

一、面向对象编程基础

(一)面向对象概述

1、对象,是一个抽象概念,表示任意存在的事物,世间万物皆对象!!
2、类是封装对象的属性和行为的载体,反过来说具有相同属性和行为的一类实体被称为类。

特点

1、封装性

将对象的属性和行为封装起来,其载体就是类,类通常会对客户隐藏其实现细节,这就是封装的思想。
在这里插入图片描述

2、继承性

继承是实现重复利用的重要手段,子类通过继承,复用父类属性和行为的同时又添加了子类特有的属性和行为。
在这里插入图片描述

3、多态性

将父类对象应用于子类的特点就是多态,子类继承父类特征的同时,也具备了自己的特征,并且能够实现不同的效果,这就是多态化的结构。
在这里插入图片描述

(二)类与对象

1、成员变量

在这里插入图片描述

2、成员方法

在这里插入图片描述
在这里插入图片描述

3、构造方法

在这里插入图片描述
什么是构造方法?
在这里插入图片描述
私有构造方法
在这里插入图片描述

4、局部变量

在这里插入图片描述
局部变量的有效范围:
在这里插入图片描述
注意: ①java中不同区域中可以有同名变量;②在同一区域中不可以定义相同名称和类型的局部变量

5、this关键字

变量与参数同名怎么办?
因此我们就引入了this关键字在这里插入图片描述
注意: this()语句之前不可以有其他代码

6、static关键字

静态变量
在这里插入图片描述
静态常量
在这里插入图片描述
静态方法
在这里插入图片描述
静态代码块【声明类对象的时候,就会执行】
在这里插入图片描述

二、面向对象核心技术

(一)类的封装

将对象的属性和行为封住起来,而将对象的属性和行为封住起来的载体就是类,类通常对客户隐藏其实现细节,这就是封装的思想

(二)类的继承、extends关键字

1、继承
在这里插入图片描述
2、extends关键字
在java中让一个类继承另一个类需要使用extends关键字.
语法:类1 extends 类2
注意:java仅支持单继承

3、方法的重写
父类的成员都会被子类继承,当父类中的某个方法并不适用于子类时,就需要在子类中重写父类的这个方法。
在这里插入图片描述
在继承中还有一种特殊的重写方式,子类与父类的成员方法返回值、方法名称、参数类型及个数完全相同,唯一不同的是方法实现内容,这种特殊的重写方式被称为重构。
super关键字
super关键字代表父类对象,且必须放第一位;

4、所有类的父类—Object
在这里插入图片描述
注意:Object类中的getClass()、notify()、notifyAll()、wait()等方法不能被重写,因为这些方法被定义为final类型。

getClass()方法
getClass方法会返回某个对象的执行时的Class实例,然后通过Class实例调用getName()方法获取类的名称。

getClass().getName;//获取名称

toString()方法
toString()方法会返回某个对象的字符串表示形式。当打印某个类对象时,将自动调用重写的toString()方法。

equals()方法
Object类中的equals()方法比较的是两个对象的引用地址是否相等。
在这里插入图片描述

(三)类的多态【一种定义、多种实现】

类的多态性可以从两方面体现:①是方法的重载;②类的上下转型;
1、方法的重载
在这里插入图片描述
2、类的上下转型
在这里插入图片描述
即把子类对象赋值给父类类型的对象,这种技术被称为“向上转型”;
在这里插入图片描述
说明:当使用显示类型转换向下转型时,必须向编译器指明将父类对象转换为哪一种类型的子类对象;
在这里插入图片描述
3、instanceof关键字【判断父类对象是否为子类的实例】
使用instanceof关键字的表达式返回值为布尔值;
在这里插入图片描述

(四)抽象类与接口

抽象类

在java中,把类似无法使用具体语言定义的图形类称为抽象类【抽象类不能产生对象实例】
在这里插入图片描述
抽象类与抽象方法【继承类必须重写抽象方法】:
在这里插入图片描述
具体实现:
在这里插入图片描述
使用抽象类和抽象方法时,需要遵循以下原则:
①在抽象类中,可以包含抽象方法,也可以不包含抽象方法,但是包含了抽象方法的类必须被定义为抽象类;
②抽象类不能直接被实例化;
③抽象类被继承后,子类需要重写抽象类中的所有抽象方法;
④如果继承抽象类的子类也被声明为抽象类,则可以不用重写父类中所有的抽象方法;

什么是接口?

接口是抽象类的延伸,接口中所有的方法都没有方法体;
implements是一个类,实现一个接口用的关键字,它是用来实现接口中定义的抽象方法;

说明:在接口中定义的任何变量都自动是static和final的,因此,在接口中定义变量时,必须进行初始化,而且,实现接口的子类不能对接口中的变量重新赋值;
在这里插入图片描述
接口的声明及实现类
在这里插入图片描述

多重继承(接口最大的优势)

在这里插入图片描述

区分抽象类与接口

在这里插入图片描述
抽象类与接口的五点不同:
在这里插入图片描述

访问控制

1、访问控制符
在这里插入图片描述
注意:声明类时,如果不使用public修饰符设置类的权限,则这个默认为default(缺省)修饰;

使用访问控制符时,需要遵循以下原则:
①大部分顶级类都使用public修饰符
在这里插入图片描述
2、java类包
在这里插入图片描述
3、final关键字【最后的最终的】
①被final修饰的类、方法和变量不能被改变;
②被final修饰的类不能被继承;
③被final修饰的方法不能被重写;
④final关键字可用于修饰变量,一旦变量被final修饰,就不可以再改变变量的值,通常把final修饰的变量称为常量;

(五)内部类

在这里插入图片描述

匿名内部类:
匿名内部类的特点是只需要使用一次,也就是说,匿名内部类不能被重复使用;
语法如下:

new A{
    
    
		...//匿名内部类的类体
};
abstract class FreshKeepingFilm {
    
     // 创建“保鲜膜”抽象类
	abstract void pack(); // 定义抽象的包装方法
}

public class Sausage {
    
     // 创建香肠类
	public static void main(String[] args) {
    
    
		new FreshKeepingFilm() {
    
     // 创建匿名内部类FreshKeepingFilm的对象
			@Override
			void pack() {
    
     // 重写抽象的包装方法
				System.out.println("缠上保鲜膜为香肠保鲜");
			}
		}.pack(); // 匿名内部类FreshKeepingFilm的对象调用重写抽象的包装方法
	}
}

使用匿名内部类时应该遵循以下原则:
①匿名类没有构造方法;
②匿名类不能定义静态的成员;
③匿名类不能用private、public、protected、static、final、abstrac等修饰;
④只可以创建一个匿名类实例。

什么情况下会使用匿名内部类?

其实匿名内部类和其他类有着相同的内部结构,只不过匿名内部类创建出的对象没有被具体的变量所引用,所以匿名内部类是“一次性”的。如果创建出的类对象有且仅有一次, 在这种场景中就可以考虑使用匿名内部类。

猜你喜欢

转载自blog.csdn.net/javaScript1997/article/details/108906053