Java面向对象的三大特征---继承
一:什么是继承?
继承就是在已经存在的类(父类)的基础上创建新类(子类)的过程,子类可以添加自己的新方法,也可以用父类的功能。
package LQQ; public class Test { public void method(){ System.out.println("我是父类"); } } class Sub extends Test{ @Override public void method() { // TODO Auto-generated method stub super.method();//继承了父类的方法 } public void method2(){ System.out.println("我是子类"); } }
二:什么时候建立父子关系(继承)?
任何A出现的地方,换做B之后仍然成立,这是A和B之间可以建立继承关系。
三:继承来的东西?
a:私有的属性被隐藏,可以通过get、set方法来访问
package LQQ; public class Test { private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } } class Sub extends Test { public static void main(String[] args) { Sub sub = new Sub(); sub.setAge(10);// 继承自父类可访问的一般属性及方法 System.out.println(sub.getAge());// 继承自父类可访问的一般属性及方法 } }
b:构造方法不被继承
package LQQ; public class Test { public Test(){ } } class Sub extends Test { public Test(){//有异常,因为无法继承父类的构造方法 } }
c:私有方法不被继承
package LQQ; public class Test { private void test(){ System.out.println("我是父类"); } } class Sub extends Test { public static void main(String[] args) { Sub sub=new Sub(); sub.test();//有异常,对父类私有方法不能继承 } }
d:继承一般属性及方法
package LQQ; public class Test { public int age; public void test(){ System.out.println("我是父类"); } } class Sub extends Test { public static void main(String[] args) { Sub sub=new Sub(); sub.age = 10;//对父类一般属性的继承 sub.test();//对父类一般方法的继承 } }
四:在子类中使用和父类一样的属性名,没有任何意义,应尽量避免。
五:重载和重写的区别
1:重写(又叫覆写、覆盖)
a:发生在父子类中
package LQQ; public class Test { public void test(){ System.out.println("我是父类"); } } class Sub extends Test { public void test(){ System.out.println("我是子类"); } }
b:同名同参同返回
package LQQ; public class Test { public int test(int a,int b){ return a+b; } } class Sub extends Test { public int test(int a,int b){ return a-b; } }
c:子类方法的修饰符不能比父类方法的修饰符更封闭
package LQQ; public class Test { public int test(int a,int b){ return a+b; } } class Sub extends Test { private int test(int a,int b){ //有异常,因为父类的同名方法是public,子类只能是比public不封闭的修饰符 return a-b; } }
d:子类抛出的异常不能比父类抛出的异常更宽泛
package LQQ; import java.io.FileNotFoundException; public class MyException { public void test() throws FileNotFoundException{ } } class Subb extends MyException{ public void test() throws Exception{ //有异常,子类最次也得是FileNotFoundException,而不能是比这个还宽泛的异常 } }
2:重载
a:发生在同一个类中
package LQQ; public class Test { public int test(int a,int b){ return a+b; } public int test(int a){ return a; } }
b:同名不同参,返回类型没要求。这里的不同指的是参数的个数,顺序,类型的不同。
package LQQ; public class Test { public double test(double a,int b){ return a+b; } public double test(int a,double b){//顺序的不同 return a+b; } public int test(int a){//个数的不同 return a; } public String test(String a,String b){//类型的不同 return a.concat(b); } }