Java学习总结

类的封装

1、概念

封装是一种信息隐蔽技术。

一是把对象的属性和行为看成一个密不可分的整体,将这两者“封装”在一个不可分割的独立单位。二是指“信息隐蔽”把不需要让外界知道的信息隐藏起来,或是有些对象的属性及行为允许外界使用。

2.类的封装特性

(1)数据封装
数据封装是指将数据和操作数据的方法封装在一起,通过定义访问权限来保护数据,这样可以确保数据的安全性和一致性。在实际开发中,可以通过封装来隐藏对象的内部状态,只允许通过对象的方法来访问和修改数据,从而降低了对象之间的耦合性,提高了系统的可维护性和可扩展性。
(2)访问控制
访问控制是类的封装特性之一,通过访问修饰符来限制对类的成员的访问权限,实现了对类内部数据和方法的保护。这样可以避免外部的代码直接访问和修改类的内部数据,保证了数据的安全性和一致性。
(3)抽象
抽象是类的封装特性之一,通过抽象可以将具体的事物抽象成一个独立的实体,从而可以更加有效地管理程序。通过抽象,可以将共性的部分提取出来,形成一个抽象的类或接口,然后具体的实现可以根据需要进行扩展和改进,从而提高了程序的灵活性和可维护性。
(4)继承

继承是类的封装特性之一,通过继承可以将相关的操作封装放到基类中,然后子类可以继承基类的属性和方法,并根据需要进行相应的改进和扩展。这样可以减少代码的冗余,提高了程序的可复用性和扩展性。同时,通过继承可以构建类的层次结构,从而提高了代码的组织性和可读性。

this关键字

1、this是一个变量 ,一个引用。
his保存的就是当前对象的地址,指向对象本身,即this代表的就是“当前对象”。

2、this存储在堆内存中,存在于对象的内部。

3、this只能用在实例方法中,谁调用这个实例方法,this就是“谁自己”。

4、this不能出现在静态方法中,因为this代表当前对象,静态方法中不存在当前对象行调用会出现错误: 无法从静态上下文中引用非静态 变量 this

5、大多数情况下,this可以省略

构造方法

一、构造方法的概念

 构造方法(也称为构造器)是一个特殊的成员方法。名字必须与类名相同,在创建对象时由编译器自动调用,并且在整个对象的生命周期内只调用一次。

二、构造方法特点

构造方法的名称必须与类名相同;

● 构造方法可以有0个、1 个或多个参数;

● 构造方法没有任何返回值,也不带void关键字;

● 构造方法不能被static、final、synchronized、abstract 和native修饰;

● 构造方法的默认返回类型就是对象类型本身;

● 构造方法只能与new运算符结合使用;

● 一个类中可以有多个同名的构造方法,但参数不同,即构造方法也可以被重载;

● 所有的类都有一个默认的构造方法。

类的继承

1、继承是面向对象的三大特征之一,可以使得子类具有父类的属性和方法,还可以在子类中重新定义,追加属性和方法。

继承是指在原有类的基础上,进行功能扩展,创建新的类型。

继承的优缺点

继承好处:

   实现了数据和方法的共享
   提高了代码的复用性(多个类相同的成员可以放到同一个类中)
   提高了代码的维护性(如果方法的代码需要修改,修改一处即可)
   提高了代码的可扩展性

继承弊端:继承让类与类之间产生了关系,类的耦合性增强了,当父类发生变化时子类实现也不得不跟看变化,削弱了子类的独立性

继承的格式

class 父类{
 
}
class 子类 extends 父类{
 
}

继承的注意事项:

1、在Java中, 类只支持单继承 ,也就是说一个类只能有一个直接父类

2、多个类可以继承一个父类 。

3、在Java中, 多层继承是可以的 ,即一个类的父类可以再去继承另外的父类。

抽象类与接口

一、抽象类的概念

在一个类中,含有的方法只有方法名,没有方法体的类,我们称之为抽象类。

认识抽象类

abstract class Shape {
 
    public abstract void draw ();
}

抽象类和抽象方法的注意事项

1.抽象类和抽象方法都是使用abstract进行修饰的。


2.抽象类不能进行实例化,但是普通类是可以的。

3.抽象类当中 不一定包含抽象方法,但是包含抽象方法的类,一定是抽象类。


 4.抽象类当中 可以定义成员变量和成员方法。


 5.当一个普通类 继承我们的 抽象类了,此时在普通类当中一定要重写抽象类中的抽象方法。


 6.抽象类存在的最大的意义 就是 为了被继承。


 7.当一个抽象类A继承一个抽象类B,此时抽象类A不需要重写抽象类B中的成员,但是当一个普通类C,继承了抽象类A,此时就需要重写所有没有被重写的抽象方法。


 8.一定要满足重写的要求。


 9.final关键字 不可能同时作用在一个方法或者类上。


 10.抽象类当中可以存在构造方法,在子类实例化的时候,会帮助父类的成员进行初始化。

二、接口的定义和使用

  其实接口的定义跟类的定义差不多接口本质上来说也是一个类,接口就相当于一个公共规范,定义接口的关键字为interface,类和接口之间 使用关键字 implements来进行关联,先让我们用一段代码看一下接口的定义和类和接口的关联

定义接口样例:

interface A {// 定义了接口
	public static final String MSG = "Hello";
 
	public abstract void print();
}

 

接口的使用原则:

1、接口必须要有子类,但是此时一个子类可以使用implements关键字实现多个接口;
2、接口的子类(如果不是抽象类),必须要覆写接口中的全部抽象方法;
3、接口的对象可以利用子类对象的向上转型进行实例化操作。

接口中其他成员的特点:


1.接口中,无法定义成员变量,但是可以定义常量,其值不可以改变, 接口中常量默认使用public static final修饰

接口中的常量修饰符可以省略不写.不写默认也是public static final

​ 常量的命名规则:所有的单词都要大写,多个单词之间可以使用下划线连接 ​ AAA_BBB_CCC ​ 定义一些常用的常量: ​

2.接口中,没有构造方法,不能创建对象。


3.接口中,没有静态代码块

类的多态

一、多态的概念

多态:通俗的来说就是多种形态,对于不同的情况,会产生不同的状态

二、多态的使用概念

1.必须在继承体系下,子类必须继承父类
2.子类必须要对父类中方法进行重写
3.通过父类的引用调用重写的方法

三、多态的两种形式–向上转型和向下转型

1、向上转型的特点和规则如下:

(1)子类对象可以隐式地转型为父类对象,不需要任何显式的类型转换操作。

(2)父类引用变量可以引用子类对象,但通过父类引用变量只能访问到子类对象中定义的父类成员,无法访问子类独有的成员。

(3)子类对象中重写的方法,在通过父类引用变量调用时,会调用子类中的实现(动态绑定)。

(4)向上转型是安全的操作,因为子类对象本身就是一个父类对象

2、向下转型的特点:

(1)只能强制转换父类的引用,不能强制转换父类的对象


(2)要求父类的引用必须指向的是当前目标类型的对象


(3)当向下转型后,可以调用子类类型中所有的成员

四、多态的优缺点


1、Java多态性的优点:

(1)灵活性和可扩展性:多态性使得代码具有更高的灵活性和可扩展性。通过使用父类类型的引用变量,可以以统一的方式处理不同类型的对象,无需针对每个具体的子类编写特定的代码。

(2)代码复用:多态性可以促进代码的复用。可以将通用的操作定义在父类中,然后由子类继承并重写这些操作。这样一来,多个子类可以共享相同的代码逻辑,减少了重复编写代码的工作量。

(3)可替换性:多态性允许将一个对象替换为其子类的对象,而不会影响程序的其他部分。这种可替换性使得系统更加灵活和可维护,可以方便地添加新的子类或修改现有的子类,而无需修改使用父类的代码。

(4)代码扩展性:通过引入新的子类,可以扩展现有的代码功能,而无需修改现有的代码。这种可扩展性使得系统在需求变化时更加容易适应和扩展。

2、Java多态性的缺点:

(1)运行时性能损失:多态性需要在运行时进行方法的动态绑定,这会带来一定的性能损失。相比于直接调用具体的子类方法,多态性需要在运行时确定要调用的方法,导致额外的开销。

(2)代码可读性下降:多态性使得代码的行为变得更加动态和不确定。在某些情况下,可能需要跟踪代码中使用的对象类型和具体的方法实现,这可能降低代码的可读性和理解性。

(3)限制访问子类特有成员:通过父类类型的引用变量,只能访问父类及其继承的成员,无法直接访问子类特有的成员。如果需要访问子类特有的成员,就需要进行向下转型操作,这增加了代码的复杂性和维护的难度。

类的高级特性

在 Java 类下,使用 { } 括起来的代码被称为 代码块
分类:

局部代码块

位置:方法中定义

作用:限定变量的生命周期,及早释放,提高内存利用率

构造代码块

位置:类中方法外定义
特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性

静态代码块

位置:类中方法外定义

特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次

作用:在类加载的时候做一些数据初始化的操作

同步代码块

内部类

概述:把类定义在另一个类的内部,将该类称之为内部类。

特点:1.内部类可以直接访问外部类的成员,包括私有成员。

​ 2.外部类访问内部类的成员,必须先创建内部类对象。

分类

1.成员内部类

​ 2.局部内部类

匿名内部类
return new A(){
	...//内部类体
};

其中,A指类名。在匿名内部类定义结束后,需要加分号进行标识,这个分号不代表内部类的结束,而是代表A引用表达式的创建。

实质上,这种内部类的作用就是创建一个实现与A接口的匿名类的对象。

 静态内部类

静态内部类具有以下两个特点:
(1)创建静态内部类的对象,不需要其外部类的对象。
(2)不能从静态内部类的对象中访问非静态外部类的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值