您的位置:首页 > 移动开发 > Android开发

Android问题:JAVA基础之继承部分

2015-03-11 15:28 176 查看
继承:复用已经存在的类和方法。

反射:在程序运行期间发现更多的类和其属性的能力。

class Manager extends Employ{

//这里extends是标识继承的关键字。

}

已经存在的是基类(也叫超类或者父类),基类中是更加通用的功能和方法。

Java中所有的继承都是公共继承。

新的类是子类、派生类。相对来说子类的功能和方法更加丰富。子类中可以增加域、增加或者覆盖超类的方法,但是不能删除继承的任何域和方法。

利用新的方法可以覆盖(Override)基类中的原始方法。

如果基类的某个方法被重写后,但是需要调用基类的这个方法,必须使用super关键字来访问,否则访问的只能是子类的这个同名的方法,

访问的时候double xxx = super.getSalary(),这里super只是指示编译器调用超类方法的特有关键字;

但是,super(n,s,year,month,day)却有不同的含义,他是调用超类中含有n、s、year、month、day参数的构造器;

使用super调用构造器的语句必须是子类构造器的第一条语句;如果没有显式的调用超类的构造器则将自动调用超类的默认构造器;

如果超类没有不带参数的构造器,且子类中构造器无显式调用超类的其他构造器,则Java编译器将报告错误。

一个对象变量可以引用多种实际类型的现象被称为多态;在运行时能够自动选择调用哪个方法的现象为动态绑定。

Java中,不需要将方法声明为虚拟方法,动态绑定是默认的处理方式,如果不希望一个方法有虚拟特征,可以将它标记为final。

由一个公共超类派生出来的所有类的集合被称为继承层次。一个祖先类可以有多个子孙继承链。

Java不支持多继承,只能是单继承。

Java中,对象变量是多态的。不能将超类的引用赋给子类变量。

Java中,子类数组的引用可以转换为超类数组的引用,不需要采取强制类型转换。

方法表列出了所有方法的签名和实际调用的方法。

动态绑定无需对现存的代码进行修改,就可以对程序扩展。

覆盖方法的时候,子类的方法的可见性不能低于超类的方法的可见性。超类的某个方法为public,子类的方法必须写为public。

不允许扩展的类,被称为final类:

final class Executive extends Manager{

//类中的方法也可以被声明为final

public final String getName(){

}

}

对于final域来说构造对象之后就不允许改变他们的值了,但是将一个类声明为final,只有其中的方法自动称为final,而不包括域。

虚拟机中的即时编译器能够准确的知道类之间的继承关系,检测出类中是否真正存在覆盖给定的方法。

强制类型转换的原因:暂时忽略对象的实际类型之后,使用对象的全部功能。

编译器允许将一个子类的引用赋给一个超类变量,但是在将超类的引用赋给子类变量的时候,必须进行类型转换。

只能在继承层次内进行类型转换,类型转换之前必须先用instanceof来检查下能否成功转换。

抽象,为提高程序的清晰度,包含一个或多个抽象方法的类本身必须被声明为抽象的。

abstract class Person{

public abstract String getDescription(){

}

public String getName(){

}

String name;

}

抽象类还可以包含具体的数据和方法。类如果没有包含抽象方法,也可以将该类声明为抽象类,但抽象类不能实例化,不能创建这个类的对象。

由于不能构造抽象类的对象,所以变量永远不会引用抽象类对象,而是引用具体子类对象,在这些对象中都定义了某些能够调用的方法。

最好将域中的对象标记为private,而方法标记为public。

4个访问修饰符:

private:仅对本类可见;

public:对所有类可见;

protected:对本包和所有子类可见;

默认:对本包可见;

Java中,只有基本类型不是对象,例如数值、字符、布尔类型的值都不是对象,所有数组类型,不管是对象数组还是基本类型的数组都扩展自Object类。

Object类中的equals方法检测一个对象是不是等于另一个对象。

最好调用getClass().getName()获得类名的字符串,而不要将类名硬加到toString()方法中。

只要对象与一个字符串通过操作符“+”连接起来,Java编译就会自动调用toString方法,以便获得这个对象的字符串描述。

Java允许在运行时确定数组的大小。

解决办法就是:使用Java中另外一个被称为ArrayList的类,在添加或者删除元素时,具有自动调节数组容量的功能。

ArrayList<Type> name = new ArrayList<Type>();可以使用add方法将元素添加到数组列表中。

可以使用ensureCapacity方法估计出数组可能存储的元素数量,分配参数个对象的内部数组,调用参数次add。

将初始容量传递给ArrayList构造器:ArrayList<Type> name = new ArrayList<Type>(100);

利用size方法可以返回数组name中包含的实际元素的数目:name.size();

使用ArrayList<Type>的时候:

不必指出数组的大小,使用add将任意多的元素添加到数组中;

使用size()替代length计算元素的数目;使用a.get(i)替代a[i]访问元素。

打包和拆包是编译器认可的,而不是虚拟机。

枚举

public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

在比较两个枚举类型的时候,不要用equals,而是直接用==;

如果需要,可以在枚举类型中添加一些构造器、方法、域;构造器只是在构造枚举常量的时候被调用。

能够分析类能力的程序被称为反射。

反射机制使用的情形:

运行中分析类的能力;运行中查看对象;实现数组的操作代码;利用Method对象。

关于反射的讲解可以看看:
http://www.cnblogs.com/gulvzhe/archive/2012/01/27/2330001.html
捕获异常

try{

//可能抛出异常的一个或多个方法调用

String name = ……;

Class cl = Class.forName(name);//可能抛出异常

}

catch(Exception e)//注意Exception的超类是Throwable

{

//处理方法

e.printStackTrace();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: