文章目录
一、 面向对象
1. final关键字
-
final是Java语言当中的一个关键字
-
final 表示:最终的,不可变的
-
【重点】 final修饰的变量:final修饰的局部变量,一旦赋值不能重新赋值
-
【重点】final修饰的方法:无法被覆盖,被重写。
-
【重点】final修饰的类:无法被继承
-
final修饰的引用:
该引用只能指向1个对象,并且它只能永远指向该对象
虽然final的引用指向某个对象A后,不能再重新指向对象B。
但是对象A内部的数据可以被修改 -
final修饰的实例变量呢?
final修饰的实例变量,系统不负责赋默认值,要求程序员必须手动赋值
这个手动赋值,在变量值后面赋值可以,在构造方法中赋值也可以。 -
final控制不了能不能调用的问题,final管的是啥?
final修饰的表示最后的,不能变的,不能改的。 -
final修饰的实例变量一般添加static修饰
static final 联合修饰的变量称为 “ 常量 ” 。常量名建议全部大写,每个单词之间采用下划线衔接。 常量:实际上常量和静态变量一样,区别在于: 常量的值不能变。 常量和静态变量,都是存储在方法区,并且都是在类加载时初始化。 常量一般都是公共的:public的
重点【精辟:final修饰的变量只能赋一次值】
2. 抽象类
类到对象是实例化,对象到类是抽象。
-
什么是抽象类?
类和类之间具有共同特征,将这些共同特征提取出来,形成的就是抽象类。 类本身是不存在的,所以抽象类无法创建对象《无法实例化》。
-
抽象类属于什么类型?
抽象类也属于引用数据类型。
-
抽象类的定义?
语法: [修饰符列表] abstract class 类名{ 类体; }
-
抽象类是无法被实例化的,无法创建对象,所以抽象类是用来被子类继承的。
-
final和abstract不能同时使用,它们是对立的。
-
抽象类的子类也可以是抽象类。
-
抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
-
抽象类关联到一个概念:抽象方法
抽象方法表示没有实现的方法,没有方法体的方法。例如: public abstract void doSome(); 抽象方法特点是: 1. 没有方法体,以分号结尾。 2. 前面修饰符列表中有abstract关键字。
-
抽象类中不一定有抽象方法,抽象方法必须出现在抽象类当中。
10.【重点】一个非抽象的类继承抽象类,必须将抽象类的抽象方法实现了。
这是Java语法上强行规定的,必须的,不然编译器就会报错。
这里的覆盖或者重写,也可以叫做实现。(对抽象的实现)
3. 接口
(1)接口的基础语法。
-
接口也是一种“引用数据类型”,编译之后也是一个class字节码文件。
-
接口是完全抽象的。(抽象类是半抽象)或者可以说接口是特殊的抽象类。
-
接口怎么定义的,语法是什么?
[修饰符列表] interface 接口名 {}
-
接口支持多继承,一个接口可以继承多个接口。
-
接口中只包含两部分内容: 常量 和 抽象方法。 (接口中没有其他内容了)
-
接口中所有的元素都是public修饰的。(都是公开的)
-
接口中的抽象方法定义时, public abstract 修饰符可以省略。
-
接口中所有的方法都是抽象方法,所以接口中的方法不能有方法体。
-
接口中常量的public static final 修饰符可以省略。
-
一个非抽象的类,实现接口的时候,必须将接口中所有的方法都加以实现。
-
一个类可以同时实现多个接口。
-
extends 和implement可以共存, extends在前,implement在后。
-
使用接口,写代码的时候,可以使用多态(父类型引用指向子类型对象)。
-
接口的实现 : 类名 implement 接口名 {}
(2)接口的作用。
对比多态的作用:
接口的作用举例说明:
-
总结: 面向接口编程,可以降低程序的耦合度,提高程序的扩展力。符合OCP开发原则。
接口的使用离不开多态机制。(接口 + 多态才可以达到降低耦合度。)接口可以解耦合,解开的是谁和谁的耦合!!!
任何一个接口都有调用者和实现者。
接口可以将调用者和实现者解耦合。
调用者面向接口调用。
实现者面向接口编写实现。以后进行大项目的开发,一般都是采用将项目分离成一个模块一个模块的,
模块和模块之间采用接口衔接,降低耦合度。
类型和类型的区别:
is a (继承)、 has a(关联)、 like a(实现)、
is a :
Cat is a Animal(猫是一个动物)
凡是能够满足 is a 的表示 “ 继承关系 ”
A extends B
has a :
I has a Pen (我有一只笔)
凡是能够满足has a 关系的表示 “ 关联关系 ”
关连关系通常以 “ 属性 ” 的形式存在。
A {
B b;
}
like a :
Cooker like a FoodMenu (厨师像一个菜单一样)
凡是能够满足like a 关系的表示 “ 实现关系 ”
实现关系通常是:类实现接口。
A implement B
4. 抽象类与接口的区别
5. Object类
object中常用的方法:
5.1 toString()方法:
5.2 equals()方法:
重写equals方法的例子 :
简洁版:
总结:
- string类已经重写了equals方法,比较两个字符串不能使用 – ,必须使用equals。
equals是通用的。 - String类已经重写了toString方法。
大结论:
java中什么类型的数据可以使用 “ -- ” 判断
Java中基本数据类型比较是否相等,使用 “ -- ”
Java什么类型的数据可以使用equals判断
Java中所有的引用数据类型统一用equals方法来判断是否相等。
5.3 finalize()方法
6. package和import
-
package
第一:package出现在Java源文件第一行 第二:带有包名怎么编译? Java -d . xxx.java 第三:怎么运行? Java 完整类名
-
import
import 什么时候不需要? java.lang不需要。 同包下不需要。 其他一律都需要。 怎么用? import 完整类名; import 包名.* ;
运行:
Java.com.bjpowernode.javase.chapter17.HelloWorld
- 关于import的使用。
import 什么时候使用?
A类中使用B类
A类和B类都在同一个包下,不用import。
A类和B类不在同一个包下,需要使用import。
java.lang.*; 这个包下的类不需要使用import导入。
import 怎么用?
import语句只能出现在package语句之下,class声明语句之上。
import语句还可以采用星号的方式。
7. 访问权限控制
8. 内部类
(1) 实例内部类
- 该类在类的内部,且没有static修饰,叫做实例内部类
class Text01{
//该类在类的内部,所以是内部类
//由于前面没有static,所以是静态内部类
class Inner01{
}
}
(2) 静态内部类
- 该类在类的内部,有static修饰,叫做静态内部类
class Text01{
//该类在类的内部,所以是内部类
//由于前面有static,所以是静态内部类
class Inner02{
}
}
(3) 局部内部类
- 该类在类的方法当中
class Text01{
//局部变量
int i = 100;
//该类在类的内部是,所以是内部类
//局部内部类
// 在方法里面
public void doSome(){
class Inner03{
}
}
}