对象和封装:
面向对象设计的过程就是抽象的过程,三步走:
第一步:发现类
第二步:发现类的属性
第三步:发现类的方法
final常量:
修饰的方法不能被重写
修饰的类不能被继承
修饰的变量为常量 不能再一次赋值
构造方法:
方法名和类名一样,如果没写,系统会自动给一个无参构造
构造方法没有返回值,如果有,则不是构造方法,而是和构造方法同名的成员方法
- 方法的重载:
1必须在同一个类里
2方法名相同
3参数列表(方法参数的个数或者参数类型)不同
4与方法返回值无和方法修饰符没有任何关系
- static修饰符:
static修饰的变量属于类所有,即由这个类创建的所有对象共用同一个static变量
static修饰的属性和方法为类属性(类变量)和类方法
不使用static修饰的属性和方法属于单个对象,实例变量(实例属性)和实例方法
在方法里不能定义static变量,类变量不能是局部变量
- 封装:
封装就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而通过该类提供的方法来实现对隐藏信息的操作和访问
Setter()
写的方法 修改值
Getter() 读的方法
得到值
封装的好处:
隐藏类的实现细节,让使用者只能通过程序规定的方法来访问数据可以方便的加入存取控制语句,限制不合理操作
- this的用法:
使用this调用成员变量,解决成员变量和局部变量的同名冲突
使用this调用重载的构造方法,只能在构造方法中使用,必须是构造方法的第一条语句
- 继承:(关键词:extends)
语法:修饰符
SubClass extends SuperClass{}
每个类只能有一个父类
继承表达的是is a 的关系
请写出java.lang.Object的六个方法(9个)?
Equals(Object obj) Boolean
getClass() Class<?>
hashCode() int
notify() void
notifyAll() void
toString() String
wait() void
wait(Long timeout) void
wait(Long timeout, int
nanos) void
9.方法的重写:(必须是父子类关系)
重写方法和被重写方法具有相同的方法名,具有相同的参数列表
重写方法的返回值类型必须和被重写方法的返回值类型相同或者是其子类
重写方法不能缩小被重写方法的访问权限
- 重载和重写的区别:
重载要在同类中,方法名相同,参数列表不同,与返回值,访问修饰符无关
重写要必须是父子类关系,方法名相同,参数列表相同,返回值类型相同,访问修饰符不能严于父类
- super:
代表对当前对象的直接父类对象的默认引用
Super必须出现在子类
可以访问父类的成员
注意访问权限的限制
- 抽象类(abstract):
抽象类不能实例化
抽象方法只有方法声明,没有方法体,没有方法实现
Abstract不能和private , static和final 修饰同一个方法或者类
- 向上转型/向下转型:
小转大(自动类型转换) 向上转型
大转小(强制类型转换) 向下转型
- 多态:
不同的人做同一个动作得到不一样的结果
-
实现多态的两种方式:
-
使用父类作为方法形参实现多态
-
使用父类作为方法返回值实现多态
-
Instanceof运算符:(is a关系)
语法:对象 instanceof 类或接口
通常和强制类型转换结合使用
17.接口:(实现了Java的多继承)
语法:修饰符 interface 接口名
extends 父接口1,父接口2{
//常量定义
//方法定义
}
Class 类名 extends 父类名
implenments 接口1,接口2{
//类成员
}
接口表示一种能力:
接口表示一种约定:
接口体现了约定和实现分离的原则
接口中的属性都是全局静态常量,接口中的方法都是全局抽象的方法 接口中没有构造方法
类只能继承一个类,但可以实现多个接口,如果一个类实现了一个接口,则必须实现接口中的全部方法,否则必须将其定义为抽象类。
通过面向接口编程,可以降低代码见的耦合性,提高代码的可拓展性和可维护性,意味着开发系统时主体构架使用接口,接口构成系统骨架,这样就可以通过更换实现接口的类来实现更换系统