Java面向对象
1、继承的作用:提高代码的复用性;让类之间产生关系,继而出现了多态性
继承可以扩充已有类的功能,通过extends关键字实现,可以将父类成员的各个成员继承到子类中,使子类具有父类的属性与方法。
对父类的继承有局限性:只允许单继承,不允许多继承,但支持多层继承。
class A{}
class B{}
class C extends A,B{}
以上代码是错误的,Java不允许多继承
class A{}
class B extends A{}
class C extends B{}
以上代码是正确的,Java允许多层继承
2、Java在执行子类的构造方法之前会先调用父类中的无参构造方法,目的是对子类成员做初始化操作
因为现实中都应该是先有父类,然后才具有子类的,对于Java程序也是一样的逻辑,实例化子类时先调用父类的构造方法为父类中的属性初始化,表示先有了父类,然后就可以产生子类。
在子类继承父类时,存在着覆写的概念,覆写就是指子类定义了与父类相同名称、参数、返回值的方法,继承后子类会覆盖掉父类的同名方法。但是在覆写的过程中需要注意的是覆写是有一定的权限限制,一般情况下有三种权限,其大小关系为:private<default<public,在覆写是子类的方法权限一定要大于或等于父类的权限,覆写后子类的方法访问权限将扩大。
class Person{
private void println(){
System.out.println("Person");
}
}
class Students extends Person{
void println(){
System.out.println("Students");
}
}
注意:以上代码中不是子类覆写父类方法,因为父类中方法为private权限,子类继承时看不到私有的方法,所以子类中的方法只是一个新定义的方法。
final关键字
(1)若不想父类中的属性或者方法被子类覆写,则可以使用final关键字进行声明。
(2)使用final声明的类不能有子类
(3)使用final声明的变量即为常量,不可以被修改,public static final声明的变量为全局常量
(4)使用final声明的方法不能被子类覆写
3、super与this关键字
在继承中,可以使用super关键字从子类中调用父类中的方法、属性。
(1)super调用属性:子类继承父类后,子类也可以定义相同的属性后覆写掉父类的属性,默认情况下子类的实例化对象使用子类的属性,若想调用父类的属性,则可以直接使用:super.属性。
(2)super调用父类普通方法:直接在子类方法中使用:super.方法(),即可调用父类中的制定方法。
(3)super调用父类构造方法:在子类构造方法的首行使用:super(),即可调用父类的构造方法,也可使用:super(参数),调用有参的构造方法。
使用this关键字可以调用本类中的属性和方法。
(1)this调用属性:使用:this.属性,即可调用该类的相应属性,进行赋值或者用于运算等。
(2)this调用构造方法:若一个类中有多个构造方法,则可以使用this关键字进行互相调用,但需要注意的是this关键字必须放在构造方法的首行,而且构造方法中至少有一个构造方法不使用this关键字作为出口,以免发生递归调用构造方法。
使用super与this关键字的相似之处:
(1)当构造方法有重载时,两者均会根据所给与的参数类型与个数正确的选择相应的构造方法
(2)两者必须都放在构造方法的首行,因为两者都是做初始化操作,都需要放在首行,所以不能同时存在于一个构造方法中。
4、Object类
Java中,所有的类都有一个父类:Object类,一个好的类都应该覆写Object类中的toString()、equals()、hashCode()三个方法,而且所有的引用数据类型都可以向Object类进行向上转型。
(1)toString()方法:对象在输出时默认调用Object类中的toString()方法打印内容,所以可以在自定义的类中覆写Object类中的toString()方法输出想要输出的内容格式
(2)equals()方法:equals()方法主要用于对象的比较,默认equals()方法是比较地址值的,由于该方法可以接收任意类的对象,所以在将对象传递进方法后可以进行向下转型操作,但是需要先判断传递进的对象与调用该方法的对象是否属于同一类,是同一类则可以转型后比较对象中的成员,而不仅仅是比较两个对象的地址值,增强了程序的功能
5、抽象类与接口
抽象类是Java中专门用来当做父类的类,作用类似于模板,目的是要设计者依据它的格式来修改并创建新的类,但是不能直接拿来创建对象,抽象类也存在单继承的局限性。
抽象类的特点:
(1)包含抽象方法的类必须是抽象类
(2)抽象类与抽象方法都必须使用abstract声明
(3)抽象方法只需要声明,不需要实现
(4)抽象类必须被子类继承,非抽象子类必须覆写父类中的全部抽象方法
接口,关键字interface,是Java中非常重要的概念之一,由全局常量与抽象方法所组成,并且接口中的抽象方法必须定义为public权限。接口是不可以创建对象的,因为有抽象方法,需要被子类实现,子类对接口中的抽象方法全都覆盖后,子类才可以实例化,否则子类是一个抽象类。
接口的特点:
(1)接口可以被类多实现,也是对多继承不支持的转换形式,JAVA支持多实现。
(2)类与类之间是继承,只能单继承
(3)类与接口之间是实现,可以多实现
(4)接口与接口之间是继承,可以多继承。
6、多态
多态是Java中很重要的概念之一,多态
可以理解为事物存在的多种体现形态。
对象的多态性主要分为以下两种类型:
(1)向上转型(自动):子类对象 ——> 父类对象
(2)向下转型(强制):父类对象 ——> 子类对象
实现多态的前提:
类与类之间必须是继承或者实现的关系,并且子类覆写父类中的方法。
多态中成员变量的特点:
(1)无论编译还是运行,都参考左边(引用型变量所属的类)
(2)多态中静态成员函数的特点:
(3)无论编译还是运行,都参考左边
多态中成员函数的特点:
(1)在编译时期,参阅引用型变量所属的类中是否有调用的方法,如果有则编译通过,没有则编译失败
(2)在运行时期,参阅对象所属的类中是否有调用的方法
instanceof关键字
在Java中可以使用instanceof关键字判断一个对象属于哪一个类
对象 instanceof 类
——>
返回boolean
7、内部类与匿名内部类
内部类:在一个类的内部也可以定义一个类,也可以定义多了类,一个类内部的类就叫内部类
内部类的作用是方便的访问外部类中的私有属性
在外部访问内部类,格式为:
外部类.内部类内部类对象 = 外部类实例.new内部类();
何时使用内部类:当描述事物时,事物的内部还有事物,并且内部事物在使用外部事物的内容,则最好定义内部类来描述
内部类定义在局部时,不可以被修饰符修饰,可以直接访问外部类的成员,但只能访问final修饰的局部变量
静态内部类:使用static修饰的内部类称为静态内部类
用static声明的内部类变成了外部类,但是该内部类不能访问外部类的非static属性
当内部类中定义了静态成员,该内部类必须是static的
当外部类中得static方法访问内部类时,内部类也必须是static的
匿名内部类:匿名内部类是指内有一个具体名称的类,匿名内部类的作用是可以利用内部类创建不具有名称的对象,并利用它访问类中的成员
定义匿名内部类的前提:内部类必须是继承一个类或者实现一个接口
---------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------