面向对象三大特性:
封装,继承,多态
一、封装:
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过类提供的放法来实现对隐藏信息的操作和访问
1、封装实现:
(1)修改属性的可见性:设为private;
(2)创建getter/setter方法:用于属性的读写;
(3)在getter/setter方法中加入属性控制语句,对属性值的合法性进行判断。
2、包的作用:管理Java文件,解决同名文件冲突
3、定义包:package 包名
//必须放在Java源程序的第一行
包名间可以使用“.”隔开
4、系统中的包:
java.(功能).(类)
java.lang.(类) 包含Java语言基础的类
java.util.(类) 包含Java语言中各种工具类
java.io.(类) 包含输入,输出相关功能的类
5、包的使用:
(1).可以通过使用import关键字,在某个文件使用其他文件中的类。
(2).Java中,包的命名规范是全小写字母拼写
(3).使用的时候不但可以加载某个包下的所有文件 eg:com.imooc.*
也可以加载某个具体子包下的所有文件
6、访问修饰符:
7、this关键字代表当前对象
this.属性 操作当前对象的属性
this.方法 调用当前对象的方法
封装对象的属性的时候,经常会使用this关键字。
8、什么是 Java 中的内部类
问:什么是内部类呢?
答:内部类( Inner Class )就是定义在另外一个类里面的类。与之对应,包含内部类的类被称为外部类。
问:那为什么要将一个类定义在另一个类里面呢?清清爽爽的独立的一个类多好啊!!
答:内部类的主要作用如下:
(1) 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类
(2) 内部类的方法可以直接访问外部类的所有数据,包括私有的数据
(3)内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便
问:内部类有几种呢?
答:内部类可分为以下几种:
- 成员内部类
- 静态内部类
- 方法内部类
- 匿名内部类
1.继承的概念:继承是类与类的一种关系,是一种“is a”的关系
注:Java中的继承是单继承。
2.继承的好处:
子类拥有父类的所有属性和方法。
实现代码复用
3.语法规则:
class 子类 extends 父类{}
private属性无法继承
4、方法的重写:
优先调用子类的方法(返回值类型,方法名,参数类型及个数都要相同)
5、继承的初始化顺序
(1)初始化父类再初始子类
(2)先执行初始化对象中属性,再执行构造方法中的初始化。
(执行顺序:父类初始化对象 父类构造方法 子类初始化对象 子类构造方法)
6、final关键字:使用final关键字做表示有“最终的”含义
final可以修饰类、方法、属性和变量
final修饰类,则该类不允许被继承
final修饰方法,则该方法不允许被覆盖(重写)
final修饰属性:则该类的属性不会进行隐式的初始化(类的初始化属性必须有值)或在构造方法中赋值(但只能选其一)
final修饰变量,则该变量的值只能赋一次值,即变为常量;如果使用final修饰变量,且没有给该变量赋值,系统不会自动给该变量赋默认值,会报错
7、super关键字:
在对象的内部使用,可以代表父类对象
(1)访问父类的属性 super.父类属性
(2)访问父类的方法 super.父类方法
super的应用:
子类的构造的过程当中必须调用其父类的构造方法。
如果子类的构造方法中没有显示调用父类的构造方法,则系统系默认调用父类无参的构造方法。
如果显示的调用构造方法,必须在子类的构造方法的第一行。
如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参的构造方法,则编译出错。
如果自己定义了一个有参构造方法,则系统不会再创建一个默认的无参构造方法。
8、Object类
Object类是所有类的父类,如果一个类没有使用extends关键字明确标识继承另外一个类,那么这个类默认继承Object类。
Object类中的方法,适合所有子类。
(1)toString()方法
在Object类里面定义toString()方法的是返回的对象的哈希code码(对象地址字符串)
如果直接输出对象名,就会执行toString()方法。例如:System.out.println(实例化对象名);
可以通过重写toString()方法输出对象的属性。
public String toString() {
return "HelloWorld[name="+name+"]";
}
(2)equals()方法
比较的是对象的引用是否指向同一块内存地址。
Dog dog=new Dog();
一般情况下比较两个对象是比较他的值是否一致,所以要进行重写。
equals()方法返回的值是布尔类型。
三、多态:
1、对象的多种形态
(1)引用多态
父类的引用可以指向本类对象
Animal obj1 = new Animal();
父类的引用可以指向子类对象
Animal obj2 = new Dog();
(2)方法多态
创建本类对象时,调用的方法为本类方法
创建子类对象时,调用的方法为子类重写的方法或者继承的方法。
注:父类的引用定义的子类对象不可以调用子类中新定义的方法
2、引用类型转换
(1)向上类型转换(隐式/自动类型转换),是小类型到大类型的转换(无风险)
(2)向下类型转换(强制类型转换),是大类型到小类型(有风险)
(3)instanceof运算符,来解决引用对象的类型,避免类型转换的安全性问题
3、抽象类
(1)语法定义:抽象类前使用abstract关键字修饰,则该类为抽象类。
(2)应用场景:
a、在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。
b、从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。
(3)作用:
限制规定子类必须实现某些方法,但不关注实现细节。
(4)使用规则
a、abstract定义抽象类
b、abstract定义抽象方法,只有声明,不需要实现
c、包含抽象方法的类是抽象类
d、抽象类中可以包含普通的方法,也可以没有抽象方法
e、抽象类不能直接创建,可以定义引用变量
4、接口:
(1)接口概念
接口可以理解为一种特殊的类,由全局常量和公共的抽象方法所组成。
类是一种具体实现体,而接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部数据,也不关心这些类里方法的实现细节,它只规定这些类里必须提供的某些方法。
(2)接口定义
与类定义不同,定义接口不再使用class关键字,而是使用interface关键字。
接口就是用来被继承、被实现的,修饰符一般建议用public,注意:不能使用private和protected修饰接口。
接口定义时必须有abstract关键字,接口可以继承多个父接口。
常量:
接口中的属性是常量,即使定义时不添加public static final修饰符,系统也会自动加上。
方法:
接口中的方法只能是抽象方法,即使定义时不添加public abstract 修饰符,系统也会自动加上。
(3)使用接口
一个类可以实现一个或者多个接口,实现接口使用implements关键字。Java中一个类只能继承一个父类,是不够灵活的,通过实现多个接口可以做补充。
如果要继承父类,继承父类必须在实现接口之前。
接口在使用的过程当中,还经常与匿名内部类配合使用。
匿名内部类就是没有名字的内部类,多用于关注实现而不关注实现类的名称
5、UML:统一建模语言(标准建模语言)
常用UML图:
用例图、序列图、类图
UML建模工具:
VIsio、rational rose、powerDesign
来源:CSDN
作者:_時_
链接:https://blog.csdn.net/PurpleGalaxy/article/details/47291935