|
private成员 | 默认成员 | protected成员 | public成员 | |
同一类中可见 | 是 | 是 | 是 | 是 |
同一包中对子类可见 | 否 | 是 | 是 | 是 |
同一包中对非子类可见 | 否 | 是 | 是 | 是 |
不同包中对子类可见 | 否 | 否 | 是 | 是 |
不同包中对非子类可见 | 否 | 否 | 否 | 是 |
实例成员与类成员 (类成员方法和实例成员方法)
类成员使用类名访问,声明类成员需要加上static,如下所示
public class Person1{
String name;
static int count;
}
访问方式为:假设一个对象p
Person1.count;
p.name;
继承
Java中只支持单继承,子类不能够继承父类的构造方法。但在子类当中可以使用super调用父类的构造方法。格式为super([参数列表])
子类可以对父类赋值兼容。
由于继承相对而言比较简单,所以不再赘述。
多态性
多态性有两种
a,编译时多态。
b,运行时多态。
方法的多态性主要有方法的重载和覆盖。
方法的覆盖表现出两种多态性,当对象获得本类的实例时,为编译时多态性,否则为运行时多态性。
Person p=new Person();
Student stu=new Student();//假设Student是Person的子类,它们有同样的print()方法。
Person p1=new Student();
p.print();//编译时多态,执行本类方法
stu.print();//编译时多态,执行覆盖方法
p1.print();//运行时多态,执行Student覆盖方法
p1声明为父类对象但是却获得了子类的实例,那么它究竟执行的是子类覆盖方法还是父类方法呢?
这里有两种情况,这取决于子类是否覆盖了父类的该方法。如果子类覆盖了该方法,就执行子类的该方法,否则执行父类方法。但是在编译时,仅仅依据对象所属的类无法确定到底该执行哪个类的方法,只有到运行是才能呢个确定,所以是运行时多态。
这里请注意,父类对象并不能没有被子类覆盖的方法。
3,类和接口及抽象类内部类
//基本类
public class Manager extends Person implements Job{
}
//抽象类
public abastract class Person{
String id;
String name;
int age;
//对应get和set方法
public abstract String goodAt();
}
//接口
public interface Job{
//abstract可有可无
public abastract String getJobName();
public int getSalary();
}
//最终类
public final class Math extends Object{
}
如上,使用关键字abstract声明的类称为抽象类,使用abstract声明的成员方法为抽象方法,抽象类通常包含抽象方法,抽象方法是只有方法声明而没有方法体的成员方法。
抽象类不能被实例化。
抽象类中可以不包含抽象方法,但是包含抽象方法的类必须声明为抽象类。抽象方法必须被子类覆盖。
最终类不能被继承。
接口
接口是一组常量和抽象方法的集合。在Java中接口是一种引用数据类型。接口的作用是提供方法声明与方法实现分离的机制,使多个类之间表现出共同的行为能力。它有一下的特点。
1)接口及接口成员的访问权限都是public。
2)接口中的成员方法都是公有的抽象的实例成员方法。
3)接口中所有的抽象方法必须被实现接口的类全部覆盖。
4)接口中的成员变量都是常量。
5)接口不能被实例化。
6)接口是引用数据类型。
接口与抽象类
相同点:
两者都包含抽象方法,都不能被实例化。
两者都是引用数据类型,其变量可以被赋值为子类或者实现接口的类的对象。
不同点:
抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。
抽象类与子类之间采用单继承机制;一个类实现了多个接口实现了多继承的功能。
抽象类及其类中成员具有与普通类一样的访问权限;接口中的访问权限都是public。
抽象类可以包含非抽象的方法,也可以声明构造方法;接口中的方法全部都是抽象方法。
抽象类可以声明成员变量,子类可以对成员变量赋值;接口只能声明常量。
内部类
声明内部类
在一个类中包含另一个类的定义
内部类可以在类、方法甚至语句块中定义
内部类可以是private或protected
这里呢,我对内部类的理解不深入,所以需要重新整理了,到此为止吧,我将整理另外一篇有关内部类的文章。
发表于 @ 2010年10月07日 20:40:00 | 评论( 0 ) | 举报| 收藏
|