`
tiantian911
  • 浏览: 217121 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java-review-oo

阅读更多
2008年4月17日 10:07:05
OO:封装(整体性,信息隐蔽)继承多态
对象:某些事物的一个抽象,属性(静态特性),服务(动态特性)
类:具有相同属性的一组对象的集合。

new创建对象的时候,每一个对象的属性占用不同的内存区域,服务是共用的。
static{...}不在任何的方法中,classloader加载的时候按照顺序执行,而且只执行一次。
int-Integer char-Character
特殊类-一般类
protected:可以被子类访问,但是其他的不相干类不能访问。
子类从父类继承到了:父类除了构造之外的所有成员,以及父类从它的父类那得到的所有成员。
子类对象不能访问对象中父类中的private


方法覆盖:在子类中定义跟父类完全一样(名字,返回值,参数)的方法。
方法覆盖不能缩小方法的访问权限,只能相同或扩大(private->public).WHY???
子类方法不能抛出比父类方法更多的异常。
前者抛出的异常必须和后者抛出的异常相同,或前者抛出的异常是后者抛出异常的子类;
是否静态不能改变。

方法覆盖可以用来使成员屏蔽(public->private),是子类不可见(即不提供给子类)。


super对超类对象的引用。
超类构造函数:
在子类的构造的第一行:super(参数表)

父类中有收尾,例如clearUp(),不是finaliz,在子类可以用super.clearUp()来调用。

final用于非抽象。类不能被继承。方法不能被子类的方法覆盖。变量为常量。必须初始化。


多态:同一个符号或名字在不同的环境下有不同的含义。
运行时多态(重载),编译时多态(继承,动态绑定)。
重载:一个类中多个方法,名字相同,参数不同。返回值相同。
运行时找最接近的参数表。

public static void main(String[] args) {
SuperClass superObj = new SuperClass();
SubClass subObj = new SubClass();
SuperClass superReferToSub = subObj;
}

superReferToSub仍然是SC,但是指向的是SubClass。

package practice;

public class Student {

private String name;
private String age;
protected int grade;
public String address;

Student(String id){
System.out.println("Superclass->constructor "+id);
}
public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAge() {
return age;
}

public void setAge(String age) {
this.age = age;
}

public int getGrade() {
return grade;
}

public void setGrade(int grade) {
this.grade = grade;
}

public void SayHello() {
System.out.println("I'm a student.");
}
}

package practice;

public class Graduate extends Student {
Graduate(){
super("tiantian");
}
public void SayHello() {
System.out.println("I'm a graduate.");
super.SayHello();
}

public static void main(String[] args) {
Graduate g = new Graduate();
g.setName("Lucy");
g.setAge("23");
g.setGrade(2);
g.address = "harbin";
System.out.println(g.grade);
System.out.println(g.address);
g.SayHello();

}

}


2008年4月17日 19:49:55

java允许祖先类引用指向后代类
Student s =  new GraduateStudent()
所以一个引用变量有静态类型和动态类型两种类型。
所谓的运行时多态:在运行的时候决定调用哪个方法,如果子类重写了父类的方法则调用子类的方法,没有重写则只能调用父类的方法。

抽象类:abstract。public abstract class MyAbstractClass,不能实例化,只能继承。
用于建模现实世界中的纯粹抽象概念,鸟,鱼,灯,树。

方法名和形式参数表两部分又合称该方法的基调。-signature by lifuwang
抽象方法只能在抽象类中。
抽象类不一定有抽象方法。包含抽象方法的类一定是抽象类???

接口interface:纯虚
java中interface可以视为特殊的abstract类。只能定义共有的静态常量数据成员(只能是static final public的组合,是组合!必须实例化缺省为psf),只能定义公有的抽象方法(pa)。

public class ControllableDemo {
public static void main(String[] args) {
Television obj = new Television("创维");
Controllable ref = obj;
ref.setPower(Controllable.ON);
if (ref.isPowerOn())
System.out.println(((Television) ref).getTradeMark()
+ "牌电视的电源已经开启!");
}
}
接口的使用:
声明接口的引用,把对象赋值给这个引用,然后就可以使用这个引用去调用实现了这个接口的所有类。

Class PlayMusic implements Runable{void start();}
Class Count implements Runable{void start();}
PlayMusic pm = new PlayMusic();
Count c = new Count();
Runable r = pm;
r.start;
r = c;
r.start;

java中除了.之外所有的双目运算符的两侧都有空格。

2008年4月17日 20:09:38
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics