回顾:面向对象和面向过程
(需要在开发中慢慢体会)
面向过程是编年体;面向对象是纪传体。
回顾:封装
-
封装的步骤:
1.所有属性私有化,使用private关键字进行修饰,private表示私有的,修饰的所有数据只能在本类中访问。
2.对外提供简单的操作入口,也就是说以后外部程序要想访问age属性,必须通过这些简单的入口进行访问:
- 对外提供两个公开的方法,分别是set方法和get方法
- 想修改age属性,调用set方法
- 想读取age属性,调用get方法3.set方法的命名规范:
public void setAge(int a){
age = a;
}4.get方法的命名规范:
public int getAge(){
return age;
}
//快捷键 alt + insert注:setter和getter方法中没有static关键字,有static关键字修饰的方法调用方式为:类名.方法名(实参)
-
封装的好处:
1.封装之后,将复杂的事物简单化(所有数码产品都是这个原理)
2.封装之后才会形成真正的“对象”
扫描二维码关注公众号,回复: 14702853 查看本文章3.封装就意味着以后的程序可以重复使用。
4.提高安全性
构造方法/构造器/Constructor
1.构造方法语法结构:
[修饰符列表] 构造方法名(形式参数列表){
构造方法体;
}
2.普通方法的语法结构:
[修饰符列表] 返回值类型 方法名(形式参数列表){
方法体
}
3.对于构造方法来说,“返回值类型”不需要指定,并且不能写void,
只要写了void ,那么这个方法就成为普通方法了。
4.对于构造方法来说,构造方法的方法名必须和类名保持一致。
5.构造方法的作用?
构造方法存在的意义是,通过构造方法的调用,可以创建对象。
6.构造方法应该怎么调用?
- 普通方法是这样调用的: 方法修饰符中有static的时候: 类名.方法名(实参列表); 方法中没有static的时候:引用.方法名(实参列表)
- new 构造方法名(实参列表)
7.当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器(default/默认构造器)
8.构造方法支持重载机制。在一个类当中编写多个构造方法,这多个构造方法显然已经构成**方法重载**机制。
继承
-
继承基本作用:代码复用。但更重要的是:有了继承才有了以后的方法覆盖和多态机制。
-
语法格式: [修饰符列表] class 类名 extends 父类名{
类体 = 属性 + 方法
} -
java语言中的继承只支持单继承,一个类不能同时继承很多类,只能继承一个类。在Cpp中支持多继承。
B类继承A类,其中:
A类称为:父类,基类,超类,superclass
B类称为:子类,派生类,subclass
-java语言中子类继承父类都继承哪些数据呢?
- 私有(private)的不支持继承
- 构造方法不支持继承
- 其他数据都可以被继承
-虽然java语言当中只支持单继承,但是一个类也可以间接继承其他类,例如:
C extends B{
}
B extends A{
}
A extends T{
}
C直接继承B类,但是C间接继承T,A类
-java语言中假设一个类没有显示的继承任何类,该类默认继承Java库当中提供的java.lang.Object
方法重载 Overload
1.方法重载又称为Overload
2.什么时候用? 在同一个类当中,方法完成的功能是相似的,建议方法名相同,以便程序员的编程。
3.什么条件满足之后构成方法重载
-在同一个类中
-方法名相同
-参数列表不同:类型、顺序、个数
4.方法重载和什么无关?
-和方法的返回值类型无关
-和方法的修饰符列表无关
方法覆盖 Override
1.什么时候用? (儿子不听爸爸的话系列嘿嘿)
当父类中的方法已经无法满足当前子类的业务需求,
子类有必要将父类中继承过来的方法进行重新编写,
这个重新编写的过程称为方法重写/方法覆盖
2.什么条件满足之后方法会发生重写呢?
-方法重写发生在具有继承关系的父子类之间
-返回值类型相同,方法名相同,形参列表相同
-访问权限不能更低,只能更高
-抛出异常不能更多,可以更少。【以后讲】
3.建议方法重写的时候尽量复制粘贴,不要编写,容易出错,导致没有产生覆盖。
4.注意:
私有方法不能继承,所以不能覆盖
构造方法不能继承,所以不能覆盖
静态方法不能覆盖
覆盖只针对方法,不谈属性
多态
1.多态中的概念:
向上转型(自动类型转换)
使用格式:父类类型 变量名 = new 子类类型()
向下转型(强制类型转换)
使用格式:子类类型 变量名 = (子类类型)父类类型
前提:两种类型必须要有继承关系
没有继承关系编译不能通过
有父类引用指向子类对象
附录:
AS偷懒技巧:
ctrl + alt + L: 代码一键格式
alt + insert: 插入方法(getter、setter等)
ctrl + / 注释//
ctrl + shift + / 多行注释/**/
修饰符列表
1.public
适用对象:类、接口、成员。
介绍:无论所属的包定义在哪,该类(接口、成员)都是可访问的。
2.private
适用对象:成员。
介绍:成员只可以在定义它的类中被访问。
3.static
适用对象:类、方法、变量、初始化函数。
介绍:static修辞的内部类是一个顶级类,它和类包含的成员是不相关的。静态方法是类方法,被指向到所属的类而不是类的实例。静态变量是类变量,无论该变量所在的类创建了多少实例,该变量只存在一个实例被指向到所属的类而不是类的实例。初始化函数是在装载类时执行的,而不是在创建实例时执行的。
4.final
适用对象:类、方法、变量。
介绍:被定义成final的类不允许出现子类,不能被覆盖(不应用于动态查询),变量值不允许被修改。
5.abstract
适用对象:类、接口、方法。
介绍:abstract类中包括没有实现的方法,不能被实例化。abstract方法的方法体为空,该方法的实现在子类中被定义,并且包含一个abstract方法的类必须是一个abstract类。
6.protected
适用对象:成员。
介绍:protect成员只能在定义它的包中被访问,如果在其他包中被访问,则实现这个方法的类必须是该成员所属类的子类。