一,继承
java中只支持单继承,c++支持多继承,为了实现多继承,采用了接口的概念,在下一部分会叙述。
在继承时如上图:
(1) private被继承时是无法访问和覆盖,即使在子类中覆盖了父类的方法,在多态里面仍然会调用父类的方法。
(2)default被继承时子类无法访问(不在同一包内,同一包中的子孙类还是可以访问default的)。
eg:
class A
{
private int i = 1;
public int j = 2;
protected int k = 3;
int h = 4;
A(){}
A(int i)
{
this.i = i;
}
void fun1(){}
public void fun2(){}
protected void fun3(){}
private void fun4(){}
}
public class Test extends A{
Test()
{
super();
super.fun1();
super.fun2();
super.fun3();
//super.fun4();
//i = 11;
j = 22;
k = 33;
h = 44;
}
public static void main(String[] args) {
}
}
从上面例子可以发现:
(1)private 方法和变量都无法在子类中使用。
(2)继承的关键字是extends
(3)因为是同一包中,子类可以访问default变量和方法。
二,抽象类与接口
1,抽象类
eg:定义如下
public abstract class Test
{
abstract void testAbstract1();//定义抽象方法1
abstract void testAbstract2();//定义抽象方法2
}
(1)抽象方法本身没有具体的方法体,除非被重写。
(2)类中只要有一个抽象方法就是抽象类,所以继承抽象类必须将它的所有抽象方法都重写,否则仍然还是抽象类,无法定义对象。
2,接口
interface In{
int i = 0;
public static final float j = 3.14f;//红色部分可以省略
void fun();
public abstract void fun2();
}
interface In1{
int i = 0;
public static final float j = 3.14f;
void fun();
public abstract void fun2();
}
class B implements In,In1
{
public void fun(){}
public void fun2(){}
}
(1)
不是类,尤其不用使用new
运算符实例一个接口。
(2)不能构造接口的对象,却能声明接口的变量。
(3)接口把方法的特征和方法的实现分割开来
(4)接口中不能包含静态方法。
(5)接口与接口之间可以是继承关系,而且可以实现多继承。
(6)对于接口中的固定修饰符,可以省略。
(7)一个类实现多个接口时,接口与接口之间要用逗号隔开。
(8)多个接口实现有重复方法,只实现一个。
三,多态
多态:父类的引用指向子类的对象。Parent p = new Son();此时发生了向上类型转换。
(1)在C++中有个概念是动态绑定与静态绑定,java中也一样。
静态绑定:编译之后就确定了其调用入口。
动态绑定:程序运行时才决定其调用入口
(2)在C++中多态是由虚函数表来实现的,需要关键字virtual.
而在java中,但是父类对象的类型信息表会去调用子类类型信息表中和父类相同的成员方法。也就是说在子类中没有覆写父类的方法,
则也就没有多态的行为了。
eg:
class A
{
void fun1(){System.out.println("A");}
}
public class Test extends A
{
void fun1(){System.out.println("test");}
public static void main(String[] args) {
A t = new Test();
t.fun1();
}
}
执行结果是:
test
四,重载,覆写