JAVA-继承,重载,覆盖,private,sbstract

1.继承

syntax: class A extends B

子类可以继承父类的所有成员变量和方法

继承的作用

  • 通过继承可以简化类的定义
  • java只允许单继承,不允许多重继承
  • 可以有多层继承例如    B继承A,C继承B, 那么C就间接继承了A
  • 子类继承了父类的所有变量和方法,但是不继承父类的构造方法。在子类的constructor中可以使用super()语句来调用父类的constructor。
  • 如果子类的构造方法中没有显式地调用父类的constructor ,也没有使用this关键字调用重载其它的构造方法,则在产生子类的实例对象时,系统默认调用父类的constructor。此时,如果父类中没有no-arg的constructor,将出现compile error。
  • super(...)和this(...)不能同时在一个构造函数中出现。
  • super(...)和this(...)调用语句只能作为构造函数的第一句出现。

class A

{

    int i;

    void display(){}

}

class B extens A

{

    int j;

    void show(){}

}

 

program1:

 

A a = new A();  B b = new B()
A aRef;          B bRef;
aRef = a;  aRef.i , aRef.display();
aRef = b;  aRef.i , aRef.display(), aRef.j,aRef.show        //compile error

 

aRef = b,可以这样理解,把子类当成父类用,父类里没有show(),所以编译出错,但是aRef 的类型已经变了,变成了B

 

program2:

 

A a = new A();  B b = new B()
A aRef;          B bRef;
aRef = a;  aRef.i , aRef.display();
aRef = b;  aRef.i , aRef.display():

bRef = (B) aRef; bRef.j , bRef.show                            //compile and run

将父类强行转化成子类,但是现在父类引用的类型已经是B了,所以能这样。

program3:

 

A a = new A();  B b = new B()
A aRef;          B bRef;
aRef = a;  aRef.i , aRef.display();
bRef = (B) aRef; bRef.j , bRef.show            //compile success but generate a run exception

将父类强行转化为子类,但是现在父类引用的类型还是A,所以编译成功但出现异常
 

2.重载和重写 overloading and overriding

 

 overloading

  • java方法重载-具有相同的函数名,参数的个数或类型不同,这也是多态性的体现
  • 需要注意的是 重载的方法可以有返回值或没有,但是不能以函数的返回值类型来区分重载

overriding

  • 子类和父类之间多态性的体现,当子类中定义了和父类中同名和同参数的方法时,父类中的方法就被重写,也成为覆盖。
  • 使用super()函数可以调用父类中的方法。

3.private关键字

当类中使用private关键字修饰变量或方法,则子类中不能对此变量进行修改,类的实例对象也不能修改。

 

4.抽象类  abstract

  •  抽象类必须用abstact 关键字来修饰,同理抽象方法。
  • 抽象类不能产生实例对象,也就是不能使用new关键字去产生对象
  • 抽象的方法只需声明不需要实现。
  • 含有抽象方法的类必须声明为抽象类,抽象类的子类必须覆盖了所有的抽象方法后才能被实例化,否则这个类还是一个抽象类。

 abstract class A
{
    public abstract String hello();
}
 class B extends A
 {
     public String hello()
     {
         return "hello";
     }
 }
public class AbstactExample {
   
    public static void main(String[] args) {
        A a = new A();//compile error
        B b = new B();
    }

}

 

5.final关键字

  • final  标记的类不能被继承
  • final 标记的方法不能被重写/覆盖
  • final 标记的变量(成员变量或局部变量)即成为常量,只能赋值一次。final标记的成员变量必须在声明的同时赋值,或在该类的构造方法中显式赋值。
  • 方法中定义的内置类只能访问该方法内的final类型的局部变量。
  • example:

public class FinalExample {
    static final int i = 10;
    static short  s;
   
    public static void main(String[] args) {
      
        s = i;
        System.out.println(s);
        System.out.println(i);       
    }

}

output:

10
10

 

 

public class FinalExample {
    static  int i = 10;
    static short  s;
   
    public static void main(String[] args) {
      
        s = i;                //compile error
        System.out.println(s);
        System.out.println(i);       
    }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值