JAVA继承

继承

1、继承的格式

  • 通过extends关键字可以实现继承

  • 子类可以通过继承获取父类的属性和方法、也可以自定义自己独有的方法和属性。

  • 继承单一性:一个子类只能有一个父类(1个儿子只能有一个父亲)

    public class Father {
        String name;
        char sex;
        int age;
    
        public void show(){
            System.out.println("我是父类的方法!");
        }
    }
    //子类
    public class Son extends Father{
        public void run(){
            System.out.println("我是子类独有的方法!");
        }
    }
    //测试类
    public class Test {
        public static void main(String[] args) {
            Son son = new Son();
            son.show();//使用的父类方法
            son.run();//使用的是子类方法
        }
    }
    

    子类拥有父类的属性和方法

2、继承中的构造方法

  • 子类的构造方法必须通过super关键字调用父类的构造方法,目的是为了初始化成员变量。

    super关键字代表父类对象,可以使用super直接使用父类的属性和方法。注意是调用父类并不会新生成一个父类对象,super关键字必须写在构造方法的第一行。

    //父类
    public class Father {
        String name;
        char sex;
        int age;
        public Father(int a){
            System.out.println("我是父类的有参构造方法");
        }
        public void show(){
            System.out.println("我是父类的方法!");
        }
    }
    
    //子类
    public class Son extends Father{
    
        public Son(){
            super(1);//调用父类的有参构造方法
            //如果没有写会系统会默认添加一个super();调用父类的无惨构造方法。
            System.out.println("我是子类的无惨构造方法");
        }
        public void run(){
            System.out.println("我是子类独有的方法!");
        }
    }
    //测试类
    public static void main(String[] args) {
            Son son = new Son();//调用子类的无惨构造方法
        }
    

3、父类的引用指向子类的对象(向上造型)

  • 父类的引用可以指向子类的对象,也叫做子类对象向上造型为父类对象。

  • 当父类的引用指向子类对象时,父类的引用只能访问父类的对象和方属性和方法。

    image-20220404145040648

4、重写

  • 方法的重写:指的是在继承关系中,子类可以重新(覆盖)父类中定义的方法,达到实现自己独有的功能目的。
  • 当子类重写的父类方法被引用的对象,调用的方法就是该对象的方法。
  • 可以使用super()关键字调用父类的方法
public static void main(String[] args) {
    Father father1 = new Father();//父类引用父类对象
    Father father2 = new Son();//父类引用子类对象
    Son son = new Son();//子类引用子类对象
    father1.show();//调用的父类的方法
    father2.show();//调用的是子类的重写方法
    son.show();//调用的是子类的重写方法
}
  • 重写和重载的区别

    重载:
    发生在编译期

    ​ 方法名相同,但参数列表不同

    ​ 调用时根据方法名和参数列表去判断

    重写:

    ​ 发生在运行期

    ​ 前提是:存在继承关系中,子类定义的方法和父类的“完全一致”。(子类的方法修饰符权限必须比父类小)

    ​ 调用时根据引用指向的对象类型去判断

案例:

1.有一个图形类(Graph),有计算面积和周长的方法。

2.一个圆类(Circle),继承图形类重写面积和周长的方法。

3.一个长方形类(Sqyare),继承图形类重写面积和周长的方法。

//图形类
public class Graph {
    public  Graph(){

    }

    //计算面积方法
    public double area(){
        System.out.println("area");
        return 0;
    }
    //计算周长
    public double perimeter(){
        System.out.println("perimeter");
        return 0;
    }
}

//圆类
public class Circle extends Graph{//继承图形类
    double r;//半径
    
    public Circle(double r){
        this.r = r;
    }
    //重新面积方法,计算圆面积
    public double area(){
        return 3.14 * this.r * this.r;
    }
    //重新周长方法,计算圆周长
    public double perimeter(){
        return 3.14 * 2 * this.r;
    }
}

//长方形类
public class Square extends Graph{//继承图类
    double length;//长
    double width;//宽
    public Square(double length,double width){
        this.length = length;
        this.width = width;
    }
    //重写面积方法,计算长方形面积
    public double area(){
        return length * width;
    }
    //重写周长方法,计算长方形周长
    public double perimeter(){
        return (2 * length) + (2 * width);
    }
}


//测试类
public class TestGraph {
    public static void main(String[] args) {
        Circle circle = new Circle(3);//圆的半径为3
        System.out.println("圆的面积为:" + circle.area());//28.259999999999998
        System.out.println("圆的周长为:" + circle.perimeter());//18.84

        Square square = new Square(10,5);
        System.out.println("长方形的面积为:" + square.area());//50
        System.out.println("长方形的周长为:" + square.perimeter());//30
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值