1、Java抽象类程序员
(一) 抽象类的相关概念编程
①若是一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类;架构
②用abstract修饰的类就是抽象类。若是某个类中包含有抽象方法,那么该类就必须定义成抽象类。可是抽象类中不必定有抽象方法;函数
(二)抽象类的定义优化
[访问权限] abstract class 类名 {spa
成员列表}设计
public abstract class Shapes {对象
public void draw(){继承
//具体代码}}开发
(三)抽象类的相关概念
①用abstract修饰的类就是抽象类。若是某个类中包含有抽象方法,那么该类就必须定义成抽象类
②抽象类能够有成员属性和非抽象的成员方法;
③抽象类不能被实例化,但能够有构造函数;
④抽象类只能用做基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的全部抽象方法,而已实现方法的参数、返回值要和抽象类中的方法同样。不然,该类也必须声明为抽象类;
(四)抽象类的注意事项
①抽象类能够有构造方法,但不能直接实例化,只能用来继承;
②抽象类的派生子类应该提供对其全部抽象方法的具体实现;若是抽象类的派生子类没有实现其中的全部抽象方法,那么该派生子类仍然是抽象类,只能用于继承,而不能实例化;
③抽象类中也能够包含有非抽象的方法,子类中重写非抽象方法时返回值和参数必须与父类一致;
④构造方法和静态方法不能够修饰为abstract;
2、Java抽象方法
(一)抽象方法的相关概念
①在某些状况下,类没法(或者没有必要)提供方法的具体实现,能够将此方法声明成抽象方法;
②在类中没有方法体的方法,就是抽象方法;
③含有抽象方法的类,必定是抽象类;
(二)抽象方法的语法
使用关键字abstract声明抽象方法,通常语法。
public abstract void draw();
3、抽象的做用
①在面向对象领域,抽象类主要用来进行类型隐藏;也就是使用抽象的类型来编程,可是具体运行时就可使用具体类型;
②利用抽象的概念,可以在开发项目中建立扩展性很好的架构,优化程序;
③抽象类,抽象方法,在软件开发过程当中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能;
4、多态性
①多态性是面向对象的三大特征之一;
②多态的含义是:对外一种表现形式,内在有多种具体实现;
③Java中多态的具体体现;
1.方法重载
2.方法覆盖
3.多态参数(新内容,重点、难点)
5、运行期类型与编译期类型
(一)第一种状况
①第一种状况:编译期类型和运行期类型相同;
②声明A的时候,使用到的类型A表示对象的类型,被称为编译期类型,在编译期,虚拟机认为a的类型是A,对于a所使用的属性和方法的有效性将到类A中去验证;
③构造方法A()中的A是运行期类型,在运行期,将执行运行期类型中的方法;
(二)第二种状况
①当有继承关系时,可能发生编译期类型和运行期类型不一样的状况,即编译期类型是父类类型,运行期类型是子类类型;
②对象ab的编译期类型为父类A类,运行期类型为子类B类;
③若是一个引用的编译期类型和运行期类型不一样,那么必定是编译期类型与运行期类型有父类子类关系;
④ab对象使用的方法,在编译期到类A中去校验,而运行则执行B类的方法;
⑤若是一个对象的编译期类型是父类,运行期类型是子类,能够对该对象进行强制类型转换,将其编译器类型转换为与运行期类型相同的类型,即:B b=(B)ab;
6、父类引用指向子类对象
①当编译器类型是父类,运行期类型是子类时,被称为父类引用指向子类对象;
class Animal{
……
}
class Cat extends Animal{
……
}
class Dog extends Animal {
……
}
Cat m = new Cat()
Animal x = new Cat() //Animal 的引用指向Cat的对象;
(二)多态环境下对属性和方法的调用
①多态环境下对成员方法的调用
Animal x = new Cat()
x.show() //调用的是子类中的方法;
编译看左边,运行看右边。
②多态环境下对静态成员方法的调用
Animal x = new Cat()
x.show() //调用的是动物类中的静态成员方法;
编译和运行都看左边
(三)多态环境下对成员变量的调用
①Animal x = new Cat()
x.num; //调用的是动物类中的成员变量。
编译和运行都看等号左边。
注意:变量不存在被子类覆写这一说法,只有方法存在覆写。
7、多态参数
(一)方法参数具备多态性
class Animal{
void eat() {}}
class Cat extends Animal{
void eat() {}}
class Dog extends Animal{
void eat(){}}
//方法的形式参数类型是父类类型,而传递的实际参数能够是任意子类的对象
method(Animal animal){
animal .eat(); }
方法参数多态性的好处:提升代码的扩展性
8、多态环境下对象造型
(一)向上造型 –又称自动类型提高
class Animal{
abstract void eat();}
class Cat extends Animal{
void look() {
System.out.println("看家"); } }
………
Animal x=new Cat() //向上造型,Cat对象提高到Animal对象
x.eat() //只能使用父类中的方法
x.look() //报错!不能使用子类中的方法
向上造型的做用是:提升程序的扩展性
(二)向下造型 –又称向下转型
class Animal{
abstract void eat();
}
class Cat extendsAnimal{
void look() {
System.out.println("看家");
}
}
………
Animal x=new Cat()
Cat m=(Cat)x; //向下转型
m.eat() ;
m.look();//子父类中的方法均可以使用
向下造型的做用是:为了使用子类中的特有方法
9、instanceof 操做符
(一)instanceof 用法
①result = 对象名称 instanceof 类型;
②参数:
result:布尔类型。
对象名称:必选项,任意对象表达式。
类型:必选项,任意已定义的类,能够是API中的类,能够是自定义的类;
③说明:
若是对象是这个类型的一个实例,则 instanceof 运算符返回 true。若是对象不是指定类的一个实例,或者对象是 null,则返回 false;
instanceof 运算符是用来在运行时指出对象是不是特定类的一个实例