面向对象小结
面向对象三大特征:封装,继承和多态
1.类和对象
对象:客观存在的实体(万事万物皆对象)
类:具有相同特征和共同行为对象的集合。类是对象的模板
类的组成部分:属性(特征)和方法(功能或行为)
[修饰符] class 类名{
[修饰符] 数据类型 属性名; //属性
....
[修饰符] 返回值类型 方法名(参数列表...){
//方法体
}
}
class Student{
String name;
public void detail(){
....
}
}
创建对象: 类名 对象名 = new 类名();//调用无参构造方法
Student stu = new Student();
访问实例方法:对象名.方法名(..); stu.detail();
访问成员变量:对象名.属性; stu.name="张三";
方法的值传递和引用传递:值传递不会结果;引用传递会保留更改结果
2.封装(包装):隐藏实现细节
属性的封装:a.将属性私用化 b.提供公有getter和setter方法 c.添加访问控制
public class Student{
private String name;
private int age;
public void setAge(int age){
if(age<25){
this.age=25;
}else{
this.age=age;
}
}
public int getAge(){
return age;
}
....
}
3.构造函数:为成员变量赋初始值
a.方法名必须与类名相同
b.没有返回值类型(void也是一种返回值类型)
c.构造函数使用 new关键字调用
注意:每一个类在 编译时都会给 它加上一个无参的构造函数,如果显示的定义了有参构造,在编译时就不会添加无参构造
4.this关键字:代表对对象本身的引用(区分成员变量和局部变量)
5.方法的重载:方法名相同,参数列表不同
参数列表不同:个数不同,类型不同,顺序不同
6.继承:继承代表了is-a关系(如果A是B,那么A继承了B),Java中的继承是单继承(一个类只能有一个父类,一个父类可有多个子类)
使用extends关键字建立类与类之间的继承关系,子类拥有父类非private修饰的属性和方法。
继承的优点:
1.提高代码的复用性。(Write Once,Only Once)
2.可以和多态结合使用提高程序可扩展性和可维护性
继承的缺点:
1.耦合性过高(父变子不得不变),对类的污染性比较严重
2.对子类暴露实现细节
class A{
public void detail(){
}
}
class B extends A{
public void detail(){
}
}
7. super关键字: super关键字代表对父类的应用。
a.可以用super关键字调用父类的构造函数:必须出现在方法的第一行
b.super访问父类的属性
c.super访问父类中的方法
8.方法的重写:一般发生在父子类之间。
子类中的方法名与父类的方法名一致,参数列表一致,返回值类型应相互兼容,子类修饰符>=父类修饰符范围
9.Java中的修饰符
本类 同包其他类 同包子类 异包子类 异包其他类
public Y Y Y Y Y
protected Y Y Y Y N
缺省 Y Y Y N N
private Y N N N N
10.static修饰符
a.修饰成员变量(全局变量) 类名.属性名;
b.修饰方法: 类名.方法名;
c.修饰代码块(会自动执行)
11. final关键字
a.修饰变量:常量(在运行的过程中不能为其重新赋值)
b.修饰方法:该方法不能被重写
c.修饰类: 不能被继承
12.Object类:所有的基类
toString();
equals();
hashCode();
13.抽象类(abstract)
使用abstract修饰的类叫抽象类,抽象类中可有抽象方法(使用abstract修饰的方法--没有方法体),抽象类中也可以没有抽象方法
抽象类不能实例化(使用使用new关键字创建实例)
如果一个类继承了抽象类,这个类必须实现抽象中所有的抽象方法
abstarct class A{
public abstract void test();
}
14.多态:同一个"接口",因不同实现而执行不同的操作
生活中的多态:同一种物质不同的表现形态(水:固体,液态,气体)
优点:提高程序的可扩性和可维护性
多态和继承及方法的重写是密不可分的;
15.接口:
优点:1.规范 2.和多态结合使用(提高程序的可扩性和可维护性)
面向实现类的编程:耦合性过强(不推荐)
面向接口的编程(开闭原则):程序主架构使用接口
使用interface关键字定义接口
注意:a.接口中所有的成员变量是常量: public static final
b.接口中的方法是抽象方法(没有方法体)
c.接口中默认的修饰符是public
d.接口不能实例化
通过implements来实现接口(实现多个接口),接口实现类中必须实现接口中的定义的方法
interface A{
int I=0;// public static final int I=0;
void test();//public abstract void test();
}
interface B{
void test2();
}
class C {
void test3(){
}
}
public class D extends C implements A,B{
public void test(){
}
public void test2(){
}
}
A a = new D();
B b = new D();
C c = new D();
D d = new D();