java回顾之多态、内部类、权限修饰符、代码块

java回顾之多态、内部类、权限修饰符、代码块

一、多态

1.1、多态的概念

  一个对象可以表现多种形态,这就叫做是多态,比如:我们可以说猫是一只猫,我们也可以说猫是一个动物

  java中多态的前提

  要有继承extends或者实现implement关系

  体现多态要有方法重写

  要有父类引用指向子类对象

实例代码:

//创建对象
Cat c=new Cat();
//要有父类引用指向子类对象
Animal a=new Cat();

1.2、多态的成员访问特点

  成员变量

    编译看左边(父类),运行看左边(父类)

(这个意思就是,当写代码的时候,用到的变量都是父类的变量,运行的时候也是父类的变量)

  成员方法

    编译看左边(父类)、运行看右边(子类)

  (这个意思就是,用到的方法,父类中要有,运行的话其实是子类中重写的父类的方法)

//动物
public class Animal {

    String name = "123";

    public void method(){
        System.out.println("父类的方法");
    }
}

//猫
public class Cat extends Animal{

    String name = "321";

    public void method(){
        System.out.println("子类的方法");
    }
}

public class Demo {
    public static void main(String[] args) {

        //创建对象
        Cat c = new Cat();

        //要有父类引用指向子类对象
        Animal a = new Cat();

        //编译看左边(父类),运行看左边(父类)
        System.out.println(a.name);

        //编译看左边(父类), 运行看右边(子类)
        a.method();
    }
}

1.3、多态的好处和弊端

弊端:

  多态情况下,不能调用子类的特有方法

  因为父类中没有子类的特有方法,编译就没有办法编译

好处:

  提高了代码的扩展性

比如吃饭一个方法,参数是类型

public static void method(Cat c){

这代表猫吃饭,但是如果传过来一个狗,这个方法就接不了参数,因为类型不同,就需要再写一个吃的方法,参数中定义的是Dog d

}

public static void method(Dog d){ 

但是如果有多态,可以将参数这写成动物接口,然后所有的类来实现动物
}

//使用多态
//一个方法可以接受任意动物的子类,这个方法提高了代码扩展性
public static void method(Animal a){ 
//相当于 Animal a = new Cat(); // Aniaml a = new Dog(); } } 

这样就可以节省代码,接收参数更灵活

1.3多态的转型

向上转型

把子类类型转成父类类型

Animal a = new Cat();    //把Cat类型转成Animal类型

向下转型

把父类类型转成子类类型

//子类类型 变量名 = (子类类型)父类类型对象;
Cat c = (Cat) a;

作用:
为了调用子类的特有方法

2.内部类

  2.1分类

  成员内部类

  局部内部类

      匿名内部类

  2.2成员内部类

  定义在类中方法外的内部类就是成员内部类

  创建对象的方式

  外部类名.内部类名  变量名=new 外部类().new 内部类();

  变量重名时的访问

  访问外部类的成员变量

  外部类名.this.变量名

  2.3局部内部类

  定义在方法中的内部类就是局部内部类

  局部内部类没什么大作用,因为局部限制了他的使用范围,只能在当前方法中使用,所以这个东西真没什么使用场景

  在局部内部类中访问了外部类的局部变量,那么这个变量就变成了final变量,不能被修改。

  2.4匿名内部类

  没有类名的内部类就是匿名内部类

  格式:

  new 类名/接口名(){

    方法重写

  };

  写法二:调用方法

method(new Animal(){
    @Override
    public void eat() {
        System.out.println("匿名内部类吃饭方法");
    }
});

三、权限修饰符

四、代码块

4.1、静态代码块

static{
要执行的代码
}

执行时机

在当前类第一次被使用的时候静态代码块会执行,且只执行一次

如果有些代码只需要执行一次且需要在别的代码之前执行,就可以放在静态代码块中,比如加载驱动。

4.2、构造代码块

在类中方法外:
{
里面可以写代码;
}

在构造方法执行的最开始先执行构造代码块

多个构造方法中有相同的代码,为了提高代码复用性,可以把相同的代码抽取到构造代码块中

原文地址:https://www.cnblogs.com/gushiye/p/13740266.html