JAVA语法三:继承和多态

目录

1.继承

1.1:父类成员访问

2.this应用和super关键字

2.1:this引用

2.2:super关键字

2.3:this和super的区别 

2.4:final关键字

3.多态

3.1:多态实现条件

3.2:重写和重载

3.2.1:重载

3.2.2:重写

3.2.3:重写和重载的区别

3.3.向上转移

3.4.向下转型

3.5:多态的优缺点


1.继承

7e32414f130646e0808641c54b94a5de.png

继承中的关键字是extends.

注意事项:

1.子类会将父类中的成员变量或者成员方法继承到子类中。

2.子类继承父类之后,必须要添加自己特有的成员,体现与父类的不同。

3.私有成员可以继承但不能访问。

4.java中只能继承一个类。


1.1:父类成员访问

 子类与父类中的成员4ada935441ed4c1f81a368a95bfa6973.png 注意:

1.如果访问成员变量子类中有,优先访问自己的成员变量。

2.如果访问的成员变量与父类中成员变量同名,则优先访问自己的。

成员变量访问遵循就近原则,自己有优先自己的,如果木有则向父类中找。


2.this应用和super关键字

2.1:this引用

1.this.普通成员变量

2.this.普通成员方法

3.this():调用结构体方法

注意:this引用的是调用成员方法的对象,不能调用静态的成员变量和方法。

0f127cd663724c75aa8ec5746dfd82f5.png

注意:

1.this只能在成员方法中使用。

2.this只能引用当前对象,不能再引用其他对象。 


构造方法:

1.名字必须与类名相同。

2.没有返回值类型,设置为void也不行。

3.当我们没有提供构造方法的时候,编译器会帮我们提供一个不带参数的方法。

4.实例化才会调用构造方法。


2.2:super关键字

1.super.data:访问父类的普通成员变量。

2.super.fun():调用父类的普通成员方法。

3.this():调用父类的构造方法。

注意:只能再非静态方法中使用     

           必须是构造方法中的第一语句,不能和this同用。

23a4fa35f8cf45ab89e1a2c3c0f22dd4.png


2.3:this和super的区别 

2d03afa458374225860403077bceb580.png

 1.this是当前对象的引用,当前对象是调用实例方法的对象。super是子类对象中从父类继承下来部分成员的引用。

2.在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性。

3.在构造方法中,this()用来调用本类构造方法,super()调用父类的构造方法。


2.4:final关键字

final关键字可以用来修饰变量,成员方法以及类。

public static void main(String[] args) {
    final int a=10;
    a=20;//这里报错了,
    //final修饰变量或字段,表示常量,只能初始化一次,且初始化后不能被修改
}

final修饰类:表示此类不能被继承-----密封类658353ca9dbf424db2932ca6cdc93d93.png


3.多态

多态的意义:去完成莫个行为,当不同的对象去完成会产生不同的状态

3.1:多态实现条件

1.必须在继承的调价下

2.子类必须对父类中的方法进行重写。

3.通过父类的引用调用重写的方法。


多态中实现条件有重写,那我们来讲一讲重写和重载。

3.2:重写和重载

3.2.1:重载

class A {
    public int c;
    public int d;

    public int fun(int a, int b) {//1
        return a + b;
    }

    public double fun(double a, double c) {//2
        return a * c;
    }
}

class B {
    public int a;
    public int b;

    public int fun(int a, int b, int c) {//3
        return a + b + c;
    }
}

public class Test1 {
    public static void main(String[] args) {
        A a = new A();
        int c1 = a.fun(2, 3);
        System.out.println(c1+" ");
        int c2 = a.fun(2, 3);
        System.out.println(c2+" ");
        B b = new B();
        int c3 = b.fun(2, 3, 4);
        System.out.println(c3);
    }

4ac63287caeb4fcebcb4b498c3848ff9.png在这里1,2,3构成了重载。

注意:

1.方法名必须相同。

2.参数列表必须不同(参数的个数不同,参数的类型不同,类型的次序必须不同)。

3.与返回值类型是否相同无关。


3.2.2:重写

重写:是子类对父类非静态,非private修饰,非构造方法等的实现,进行重写。

d336ae833ff546f599539005aa773041.png

8def1d6274e041ce91470250cfcad9e9.png 方法重写的规则:

1.方法名相同。

2.参数列表相同。

3.返回值相同。(被重写的方法类型可以不同,但是必须是父子关系。)

4.访问权限不能比父类中被重写的方法的访问权限低。


重写和重载的区别,有时候会在面试中遇到。所以我们需要注意这些

3.2.3:重写和重载的区别

区别点                重写            重载
参数列表不可修改必须修改
返回类型不可修改(除了父子类关系)可以修改
访问限定符一定不能做更严格的限制可以修改


3.3.向上转移

向上转移:实际就是创建一个子类对象,将其当成父类对象来使用。

class animal{
        String name;
        int age;
        public animal(String name, int age) {
            this.name = name;
            this.age = age;
        }
        public void eat(){
            System.out.println(name+"正在吃东西");
        }
    }
 class Dog extends animal{
     public Dog(String name, int age) {
         super(name, age);
     }
     public void eat(){
            System.out.println(name+"吃狗粮");
        }
        public  void bark(){
            System.out.println(name+"汪汪叫");
        }
    }
public class Test2  {
    public static void main(String[] args) {
   animal animal1=new Dog("hihi",10);
   animal1.eat();//这里就是
   //animal1.bark()//这里报错

    }

}

881c7a7207254c03abf4a41d9afa28a2.png

这就是向上转型,只能调用父类的成员属性和方法。

 多态的用例:

56fc9e182f914c019dfeaf02ecc876d1.png

 这里就是多态,dog 和cat都调用eatFood函数,但出现的结果是不一样的。

eb5a3063ce514cd88b5c75266cf0ab20.png


3.4.向下转型

向下转型:将父类再还原为子类对象即可,即为向下转型。

614b73cc46494cefa615cf6def6d1f4d.png

 4e60956e8c0c47f2bf5ea198de938f7c.png

这里会出现类型转换异常。 

instanceof:如果该表达式为true,则可以安全转换。


3.5:多态的优缺点

好处:

1.可以降低代码的圈复杂度(条件语句和循环语句出现的个数)

2.可扩展能力更强。

坏处:

1.代码运行效率低。

2.属性和构造方法没有多态性。

总结:如果有啥不对或者没有说明清楚的,希望大家可以多多指教。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值