Java中的类可以分为三种:
类:使用class定义且不含有抽象方法的类。
抽象类:使用abstract class定义的类,它可以含有,也可以不含有抽象方法。
接口:使用interface定义的类。
类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
抽象类可以继承(extends)类,可以继承(extends)抽象类,可以继承(implements)接口。
接口只能继承(extends)接口。
1.封装
类使得数据和对数据的操作集成在一起,从而对使用该类的其他人来说,可以不管它的实现方法,而只管用它的功能,从而实现所谓的信息隐藏。 封装隐藏了类的内部实现机制,从而可以在不影响使用者的前提下改变类的内部结构,同时保护了数据。
封装时的权限区分:
private:成员变量和方法只能在类内部被访问,具有类内部可见性。
默认:成员变量和方法只能在包内部被访问,具有包内部可见性。
protected:同一个包中所有的类,同一个项目中不同包中的子类。
public:同一个项目中不同包中所有的类。
详见下图:
2.继承
继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。这种技术使得复用以前的代码非常容易,能够大大缩短开发周期,降低开发费用。继承是为了重用父类代码,同时为实现多态性作准备。
在java中,所有的java类都直接或间的接的继承了java.lang.long.Object类.Object类是所有java类的祖先.在定义一个类时,没有使用extends关键字,那么这个类直接继承Object类。
子类可以继承父类的:
1)继承public和protected修饰的属性和方法,不管子类和父类是否在同一个包里.
2)继承默认权限修饰符修饰的属性和方法,但子类和父类必须在同一个包里.
无法继承的:
1)无法继承private修饰的属性和方法
2)无法继承父类的构造方法
如果从父类继承的方法不能满足子类的需求,在子类中可以对父类的同名方法进行重写(覆盖),以符合要求,抽象方法必须被子类重写但是final修饰的方法不能被重写。抽象类不能实例化。
3.多态
方法的重写、重载与动态连接构成多态性。Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,即只能有一个父类,但是可以多个类实现同一个接口。
转换是必须先判断是否为父、子类的关系,此处直接是父子类的关系故省去。
向上转换:子类转换为父类。
class A{
public void add(){
System.out.println(“父类的方法”);
}
}
class B extends A{
public void add(){
System.out,println("子类的方法");
}
A a=new B();
//此处a.add()是执行的子类中的add()方法,即打印“子类的方法”
a.add();
}
向下转换:父类转换为子类。
class A{
public void add(){
System.out.println(“父类的方法”);
}
}
class B extends A{
public void add(){
System.out,println("子类的方法");
}
A a=new A();
B b=(B)a;//向下转换必须强制性转换
//这里a.add()还是执行的子类中的add()方法,即打印“子类的方法”
a.add();
}
参考:http://blog.csdn.net/zhengylsc/article/details/16902073