java中super的用法

来源:互联网 发布:保姆偷喝母乳 知乎 编辑:程序博客网 时间:2024/05/16 16:59
  • 继承(extend)的概念
  1. 指一个现有类的基础上去构建一个新的类,构建出来的类称为子类,现有类称为父类,子类会自动拥有父类所有可继承属性和方法。
  2. 在java中,类只支持单继承,不允许多重继承,一个类只有一个直接的父类
  3. 多个类可以继承一个父类
  4. 在java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类。
  5. 在java中,子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。
eg:Example01.java

//定义Animal类
class Animal{
String name;//定义name属性
//定义动物叫的方法
void shout(){
System.out.println("动物发出叫声");
}}

//定义dog类继承Animal类
class Dog extends Animal{
//定义一个打印name的方法
public void println("name="+name);
}}

//定义测试类
public class Example01{
public static void main(String[] args){
    Dog dog=new Dog();//创建一个Dog类的实例对象
    dog.name="沙皮狗";//为Dog类的name属性进行复制
    dog.printName();//调用Dog类的PrintName()方法
    dog.shout();//调用Dog类继承来的shout()方法
}}
  • 重写父类方法
  1. 子类对继承的方法进行一些修改,即对父类的方法的重写。
  2. 在子类中重写的方法需要和父类被重写的方法具有相同的方法名,参数列表以及返回值类型
  3. 子类重写父类的方法时,不能使用比父类中被重写的方法更严格的访问权限,如父类中的方法是public的,子类的方法不能是private。
Example02.java
//定义Animal类
class Animal{
//定义动物叫的方法
void shout(){
System.out.println("动物发出叫声");
}}
//定义Dog类继承动物类
class Dog extends Animal{
//定义狗叫的方法
void shout(){
System.out,println("汪汪。。。");
}}
//定义测试类
public class Example02{
public static void main(){String[] args}{
Dog dog= new Dog();//创建Dog类的实例对象
dog.shout();//调用Dog重写的shout()方法
}}
  • super关键字(访问父类的成员)
  1.  使用super关键字调用父类的成员变量跟成员方法( super.成员变量         super.成员方法([参数1,参数2...]))
  2. 使用super关键字调用父类的构造方法。(super([参数1,参数2....]))
  3. 注意:通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
  4. 当你讲Dog的构造函数里面的super("沙皮狗");//调用父类有参的构造方法 删掉的话,会报错,因为在子类的构造方法中一定会调用父类的某个构造方法。这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。
  5. 在定义一个类的时候,如果没有特殊需求,尽量在类中定义一个无参的构造方法,避免被继承时出现错误。
eg:Example03.java
class Animal{
String name="动物";
//定义动物叫的方法
void shout(){
System.out.println("动物发出叫声");
}}

//定义Dog类继承动物类
        class Dog extend Animal{
                String name="犬类";
//重写父类的shout()方法
            void shout(){
               super.shout();//访问父类的成员方法
}
//定义打印name的方法
void printName(){
System.out.println("name="+super.name);//访问父类的成员变量
} }

//定义测试类
public class Example03{
public static void main(String[]arg){
Dog dog=new Dog();//创建一个Dog对象
dog.sout();//调用Dog对象重写shout()方法
dog.printName();}}//调用dog对象的printName()方法

    2.使用super关键字调用父类的构造方法。(super([参数1,参数2....]))
eg;Example04.java
//定义Animal类
class Animal{
//定义Animal类有参的构造方法
public Animal(String name){
System.out.println("我是一只"+name);
}}
//定义Dog类继承Animal类
class Dog extends Animal{
public Dog(){
super("沙皮狗");//调用父类有参的构造方法
}}
//定义测试类
public class Example04{
public static void main(String[] args){
Dog dog=new Dog();//实例化子类Dog对象
}}
  1. 注意:通过super调用父类构造方法的代码必须位于子类构造方法的第一行,并且只能出现一次。
  2. 注意:当你讲Dog的构造函数里面的super("沙皮狗");//调用父类有参的构造方法 删掉的话,会报错,因为在子类的构造方法中一定会调用父类的某个构造方法。这时可以在子类的构造方法中通过super指定调用父类的哪个构造方法,如果没有指定,在实例化子类对象时,会自动调用父类无参的构造方法。
  3. 在定义一个类的时候,如果没有特殊需求,尽量在类中定义一个无参的构造方法,避免被继承时出现错误。
  • final关键字
  1. final关键字用于修饰类 变量和方法。
  2. final修饰的类不能被继承(当final修饰类时 那个类是最终类不可被子类继承也就说不能派生子类)
  3. final修饰的方法不能被子类重写
  4. final修饰的变量(成员变量或者局部变量)是常量,只能复制一次


0 0