1.从现实中抽象出类分三步:
找出它的种类----确定物种
根据“对象”抽象出“类”
找出它的属性----确定物种的特征特点
属性通常是名词表示
找出它的行为(剔除无关的属性和方法)----确定物种的行为、作用、功能等。
方法通常是动词表示
2.使用类图描述类
用于分析和设计“类”
直观、容易理解
3.构造方法:
系统提供默认无参构造方法
自定义构造方法时,系统不再提供默认无参构造方法。若仍然需要无参的构造函数,可以自己写出来,或者借助工具生成!
4.方法重载:
A.方法名相同;
B.参数列表不相同;-----不相同可以是参数数量、顺序、数据类型的不同
C.与返回值、访问修饰符无关
方法重载,说明同名的方法允许有多个,而且都在同一个类中。
常见的重载:
类的构造函数重载、System.out.println().
5.static 关键字
通常情况下,我们访问属性和方法都是通过对象来调用的,可不可以不通过对象来调用呢?可以的,使用 static 关键修饰属性或者方法,这样就可以通过类名来直接调用:
|
| static、非 private 修饰 | 非 static、private 修饰 |
| 属性 | 类属性、类变量 | 实例属性、实例变量 |
| 方法 | 类方法 | 实例方法 |
| 调用方式 | 类名.属性
类名.方法()
对象.属性
对象.方法() | 对象.属性
对象.方法() |
| 归属 | 类 | 单个对象 |
static 还可以修饰代码块,变成静态代码块!
static 还可以和 import 连用,实现静态导入
例如:import static java.lang.System.out; //静态导入 System.out
在方法里不可以定义 static 变量,若定义,Eclipse 会报错!
6.面向对象三大特征:封装、继承、多态。
封装性----每个人都有自己的隐私,不该你看的不要看。
继承性----子承父业,继承父亲的特征与技能
多态性----子孙不满足现状(重写父类的方法),或者偷学了其他技能。
7.封装:
为什么要使用封装?属性随意访问,不合理的赋值
封装:将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处:
A.只能通过规定的方法访问数据;
B.隐藏类的实现细节;
C.方便修改实现;
D.方便加入控制语句;
如何封装或者说封装的步骤:
A.修改属性的可见性;----在成员属性前面增加 private 的访问权限修饰符
B.创建 public 修饰的成员属性的 getter 和 setter 方法;----用于外部对成员属性的读写。
C.在 getter 和 setter 方法中加入属性控制语句。----对属性值的合法性进行检查
为成员属性添加 getter/setter 方法方式有以下几种:
A.手写 getter/setter 方法;
B.Eclipse 中添加 getter/setter 方法的快捷键:Shift+Alt+S+R
C.光标置于类中,菜单栏 Source---Generate Getters and Setters...
D.使用 lombok 的注解自动帮我们生成。
8.this 关键字:表示当前对象
A.调用属性:this.属性名;或者 this.属性名=值;
B.调用方法:this.方法名(); 或者 this.方法名(参数列表);
C.调用构造函数:
this(); //如果使用,必须是构造方法中的第一条语句,否则 Eclipse 报错!
this(参数列表);
9.继承:
多个相关的类有相同的属性和方法,可以将相同的部分提取出来放到另一个新类中,这个新类作为相关类的父类。
使用继承的优点:
A.减少重复的代码,不抽取父类,每个类均有相同字段,类越多重复就越多;
B.方便代码修改,只要修改一个父类,所有子类同步修改;
C.子类继承父类允许的属性和方法。
D.是代码复用的一种方式。
子类与父类是 is-a 关系。
Java 中继承是单继承的,只能继承一个父类。
继承使用的关键字:extends
如果定义一个类的类名后面跟上 extends 关键字,再加上另一个类名,则表明继承后面的那个类。例如:
class Dog extends Pet {
//子类特有的属性和方法
}
何时使用继承?符合 is-a 关系的设计使用继承
只要说“猫是哺乳动物”,猫的很多属性、行为就不言自明了
10.super 关键字:表示父类对象,和 this 类似
A.调用属性:super.属性名;或者 super.属性名=值;
B.调用方法:super.方法名(); 或者 super.方法名(参数列表);
C.调用构造函数:在子类构造方法中调用且必须是第一句
super();
super(参数列表);
注意:super 关键字来访问父类的成员
super 只能出现在子类的方法和构造方法中
super 调用构造方法时,只能是第一句
super 不能访问父类的 private 成员
11.不能被继承的父类成员:
A.private 成员;
B.子类与父类不在同包,使用默认访问权限的成员
C.构造方法
12.访问修饰符 protected
可以修饰属性和方法,本类、同包、子类可以访问.
| 访问修饰符 | 本类 | 同包 | 子类 | 其他 |
| private | √ |
|
|
|
| 默认(default) | √ | √ |
|
|
| protected | √ | √ | √ |
|
| public | √ | √ | √ | √ |
13.多重继承关系的初始化顺序是怎样的?
14.方法重写: @Override 可以检查重写的方法名是否正确
父类的方法一般更具有通用性,如果子类想有自己的特点使用父类的方法就很难做到,但是使用方法重写就可以满足要求。
方法重写,在子类中重新实现父类的方法以满足子类的要求。
父类的构造方法也会被重写吗?不能被继承,因此不能重写。
方法重写的规则:
方法名相同
参数列表相同
返回值类型相同或者是其子类;
访问权限不能严于父类。
方法重载与方法重写比较:
|
| 位置 | 方法名 | 参数表 | 返回值 | 访问修饰符 |
| 方法重写 | 子类/接口实现类 | 相同 | 相同 | 相同或是其子类 | 不能比父类更严格 |
| 方法重载 | 同类 | 相同 | 不相同 | 无关 | 无关 |
方法重写通常在子类或者接口的实现类中。
15.抽象类:
有时候,我们想限制一个类的实例化(不允许通过 new 来实例化),在 Java 中怎么办?
Java 中可以将其定义为抽象类,限制实例化,使用的关键字是 abstract。例如:
public abstract class Pet {
}
abstract 也可用于方法——抽象方法
抽象方法没有方法体
抽象方法必须在抽象类里
抽象方法必须在子类中被实现,除非子类是抽象类
抽象类和抽象方法
抽象类不能被实例化;
可以有 0~多个抽象方法;
有抽象方法的类一定是抽象类。
16.final 关键字: 最终的,最终版的
A.类不希望再被其他类继承? 使用 final 类
final 修饰的类,变成太监类,我们常见的 String 类就是 final 修饰的类
B.方法不希望被重写? 使用 final 方法
final 修饰的方法,不可以被子类重写。
C.属性值不希望被修改? 使用常量,变成常量后注意大写规范!
final 修饰的成员属性,变成成员常量;
final 修饰的变量,则变成常量。
只能在初始化时进行赋值
注意:
A.使用 final 修饰引用型变量,变量不可以再指向另外的对象.
即不可以再 new 一个对象来赋值!
B.使用 final 修饰引用型变量,变量的值(或说地址引用)是固定不变的,
而变量所指向的对象的属性值是可变的。
17.学习方式:
A.搜索;
B.看懂;
C.验证---把代码执行一遍;
D.应用到自己要写的功能中!
其他知识:
A.Eclipse 中使用 Git 插件推拉代码;
B.使用 Lombok 自动生成 getter 和 setter 方法;------减少我们通用的代码量。
B1.先下载 lombok.jar,下载地址:https://projectlombok.org/
B2.双击运行 lombok.jar 安装到 Eclipse 中;//IDEA 中安装 lombok 插件
B3.安装后重新打开 Eclipse!
B4.把 jar 包加载进项目中
Java 项目将 lombok 的 jar 包添加到项目的 BuildPath 中;
Web 项目将 jar 包添加到项目的 lib 目录中
B5.使用 lombok 的注解即可。在我们要使用的类上,或者属性上直接使用:----@Data @Getter @Setter
C.在命令行执行 jar 包的方法:例如:
java -jar lombok.jar
D.Eclipse 中在源文件中,可以通过点.列出类或者对象的所有可见的属性。
练习题:
A.用 Java 做一个计算器;
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于