java中的继承

本文详细介绍了Java中的多态性,包括方法重载和方法重写的概念及其应用条件。此外,还探讨了super关键字的用途以及如何在子类中正确地访问父类的方法。

1 在同一个包中,子类能够继承父类的public,protected和默认级别的成员变量和方法。

2 在不同包中,子类能够继承父类的public protected的成员变量和方法。

3 所有类的共同祖先是Object类。默认是集成Object类,Object定义了类的一些相同的方法。

 

方法重载是在同一个类中多态的一种表现形式。方法重载必须满足的条件:(1)方法签名相同(2)方法参数,个数和顺序至少一个不同。

(3)方法的返回类型可以不同,(4)方法的修饰符可以不同.

public String findAllBook() {
return "s";
}
public void findAllBook(){
}

 以上方法编译不通过,说明方法的重载跟有没有返回值没有关系。

 

 

方法重写是在子类和父类之间多态的一种表现形式。子类方法重写父类的方法的前提是子类必须继承父类特定的方法,子类不能重写父类的的private方法等.

满足方法重写的条件(1)子类方法的名称,参数签名和返回类型必须和父类方法的名称一致。public class Parent{
public void method(){...}
}
public class Son extends Parent
{
public void method(){...}
}

 java编译器首先判断Sub类的method方法和Parent类的method方法的参数签名,由于一致因此javabean编译器认为Son类的method方法视图覆盖父类的方法,因此必须具有相同的返回类型。

(2):子类方法不能缩小父类方法的访问权限。

(3)子类方法不能抛出比父类方法更多的异常,不行和父类方法抛出的异常相同或者子类抛出的异常是父类抛出异常类的子类。

(4)父类的静态方法不能被子类覆盖为非静态方法。反之,父类的非静态方法不能被覆盖为静态方法。

(5)子类可以定义和父类的静态方法同名的静态方法,以便在子类中隐藏父类的静态方法。

子类覆盖父类实例方法和子类隐藏父类的静态方法的区别在于:java虚拟机把静态方法和所属的类绑定,而把实例方法和所属类的实例绑定。

在java中静态方法可以通过类名.静态方法名() 或 实例名.静态方法名()来调用。
public class Parent {
	public static int add(int a, int b) {
		System.out.println("Parent static method add");
		return a + b;
	}
}
public class Sub extends Parent {
	public static int add(int a, int b) {
		System.out.println("Sub static method add");
		return a + b;
	}
	public static void main(String[] args) {
		Parent.add(1, 2);//Parent static method add
		Sub.add(2, 3);//Sub static method add
		
		Parent p = new Parent();
		//下面结果表明父类静态方法不能被子类覆盖
		p.add(3, 3);//Parent static method add
		
		
		Parent p2 =new Sub();
		p2.add(1,3);//Parent static method add
		
		
		Sub sub = new Sub();
		//下面结果表明 父类静态方法被隐藏
		sub.add(3, 4);//Sub static method add
		
	}
}

 (6)父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的的抽象方法二是重新声明抽象方法.

public abstract class Parent{
abstract void m1();
abstract void m2();
}
public abstract class Sub extends Base{
public void m1(){...}//实现m1方法并且扩大访问权限 从默认访问级别放大到public级别
pubic abstract void m2();//重新声明m2方法 扩大访问权限
}

 (7):父类的非抽象方法可以被被覆盖为抽象方法.

public class Parent {
 
	public void test(){}
}
public abstract class Sub extends Parent {
	public static int add(int a, int b) {
		System.out.println("Sub static method add");
		return a + b;
	}
	public  abstract void test();
}

 

 super 关键字:

1 在类的构造方法中,通过super()语句调用这个类的构造方法。

2 在子类访问父类的被屏蔽的方法和属性.

只能在super关键字只能在构造方法和实例方法中使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值