面向对象的特点
1.封装 2.继承 3.多态
一、封装
1. 类:把一类事物的静态属性和动态执行的操作组合在一起得到类。 抽象的
2. 对象:类的实例 具体的 有生命周期
3. 类的构造函数
特点:函数名与类型相同;没有返回类型;可以有也可以没有参数,可以有多个构造函数
生成一个对象时一定会自动调用一个构造函数
没有定义构造函数时,系统自动生成一个无参的构造函数
构造函数的赋值问题:
当一个对象被创建时,会对其各种类型的成员变量自动进行初始化赋值。如byte(0) int(0) boolean(flase) all reference type(NULL)
需注意,局部变量不会自动进行初始化,必须在使用之前进行初始化。
4.static
静态成员属于类本身,而不属于对象,被类的所有对象所共有
只有非private的static成员才可以通过类名访问,如,Student.name()
静态方法:非静态变量可以访问静态变量,静态变量不可以访问非静态变量
静态方法不能以任何方式引用this和super关键字
5.this
this是一个系统隐含的指针,被自动附在非静态的成员函数参数列表中;
关键字this代表正咋调用该方法的那个对象,包括普通方法中的该方法调用者和构造方法中的该方法本次运行创建的那个新对象
6.final
1)修饰整个类:表示该类不可以被继承 public final class A
2)修饰类中的若干属性:表示该属性必须被赋值,并且只能赋一次(注意默认值不算真正的赋值)
第一种方法,在定义成员变量的同时初始化; 第二种,在类中的构造函数中初始化
3)修饰类中的若干个方法:表示该方法可以被子类继承,但是不可以被子类重写
7.函数重载
针对同一类中的一个函数来说(一般情况下建议功能相似的函数才做函数重载)
同名、不同参
与返回值类型无关
二、继承
1.定义:一个新类从已有的类那里获得其已有的属性和方法
class SubClass entends SuperClass
2.原则:一般到特殊、包含、使用的关系
如:父类对象=子类对象 //狗可以看做是动物
3.权限问题
子类对象可以访问父类除私有成员外的所有成员
4.注意问题
1)java只支持单继承,不允许多继承(一个类有几个父类);可以多层继承
2)子类不能继承父类的构造方法, 不过可以通过super调用父类的构造方法
3)非私有的成员才可以被继承
5.super
调用父类的构造方法必须借助super(实参列表),不能直接写父类的类名
每个子类构造方法的第一条语句,都隐含的调用super()
显式写super(参数列表)
6.方法重写
指的是子类重写父类中已有的方法(如果子类对父类中的方法不满意,就可以重写父类的方法)
重写方法必须和被重写方法具有相同的方法名称、 参数列表、 返回值类型
注意:覆盖方法时,不能使用比父类中被覆盖方法更严格的访问权限,
如 父类中:public void fn()
子类中不能写 private void fn()
三、多态
1.定义 : 一个父类的引用变量,她即可以指向父类对象,也可以指向子类对象,它可以根据当前时刻指向
的不同,自动的调用不同对象的方法,这就是多态。
2.意义: 利用多态可以实现——同一段代码做不同的事情
3.注意事项:
1)子类可以直接赋值给父类引用,但父类任何情况下都不可以直接赋值给子类引用
2)通过父类引用只能访问子类对象从父类继承过来的成员,而不能访问子类特有的成员
3)只有在父类引用本身指向的就是一个子类对象时,才可以吧父类引用强制转换为子类引用
四、其他概念
一)抽象类
1.用abstract关键字来修饰一个类时,该类叫做抽象类
2. 抽象类不一定有抽象方法,但有抽象方法的类一定是抽象类
抽象方法:凡是没有方法体的方法,必须得使用关键字abstract修饰为抽象方法 public abstract void fn()
3.不能new出抽象对象,但可以定义一个抽象类的引用
如 A aa =new A();这是错误的,因为A是抽象类
可以用实现了A的所有抽象方法的子类B来: A aa=new B();
4. 抽象类也可以实现多态
二)接口
1.定义: 就是抽象方法和常量值的集合 本质上是一种特殊的抽象类
2. 接口定义的属性必须是 public static final 的,而接口的定义必须是 public abstract 的,这些修饰符可以部分或全部省略
interface it { public static final int i=20; public abstract void f(); }
3.接口可以继承多个接口,也就是允许多继承
4.只实现接口中的部分方法,则为抽象类
5.不可以new出对象,但可以通过子类new
6.可以实现多态
7.用途: 线程的创建; 事件的处理; 容器的组织方式; serializable接口