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);
}
}

 

    好困啊。。。先睡了哈浅谈Java面向对象三大特征--继承_重写