Java学习日记---多态、内部类、权限修饰符、代码块

一、多态
1.面向对象三大特征
j 封装、继承、多态(抽象)
2.定义:同一个动作,具有不同的表现形式
3.多态的前提
(1)必须有方法的继承或者实现关系
(2)必须有方法的重写
4.多态的体现
(1)文字体现:父类 对象=子类 对象
(2)代码表达Fu fu=new Zi();
举例子:

Animal 动物类  Dog 狗类 (假设Dog已经继承Animal,并且重写了某个方法)
Animal an1 = new Dog();  

Animal 动物类  Cat 猫类 (假设Cat已经继承Animal,并且重写了某个方法)
Animal an2 = new Cat();

5.多态调用方法的特点

编译阶段看父类,运行阶段看子类(编译阶段加载父类构造函数开辟内存空间,子类才能调用父类的方法)

6.多态的好处

多态最大的好处就是提高了代码的灵活性

7.多态的弊端
使用多态智能调用子类和父类都有的方法,不能调用子类特有的方法
解决方法:
向下转型(当多态是一个子类A,向下转型是一个子类B是,会出现类型转换异常,此时可以用instanceof方法判断这个对象是否是我们指定类的对象)
二、内部类
1.概念
所谓内部类就是在类A中定义了一个类B,此时B为内部类,A为外部类。
例如

/**
 * 人类,外部类
 */
public class Person {
    int age;
    String name;
    //内部类
    //a.成员内部类(心脏类)
    class Heart{
        int jumpCount; //心跳次数

        public void jump(){
            System.out.println("心脏砰砰跳~~");
            //在成员内部类中可以无条件访问外部类的任何成员
            System.out.println(age);
            System.out.println(name);
            show();
        }
    }
    
    
    public void show(){
        //b.局部内部类(了解)
        class xxx{

        }
    }
}
成员内部类有两个点:
	a.在成员内部类中可以无条件访问外部类的任何成员
    b.在测试类中创建成员内部类对象,该怎么写呢???
        public class TestDemo {
            public static void main(String[] args) {
                //1.创建外部类对象
                Person p1 = new Person();
                //2.创建内部类对象
                //Java规定,想要创建内部类的对象,必须先创建外部类的对象
                //然后通过外部类对象才能创建内部类对象
                //格式:
                //    Person.Heart 对象名 = new Person().new Heart();
                Person.Heart h = new Person().new Heart();
                //可以写这么写
                Person.Heart h1 = p1.new Heart();
            }
        }

2.内部类编译的字节码文件
内部类编译之后的字节码文件名: 外部类名$内部类名.class 比如我们案例中的Heart类,编译之后: Person$Heart.class
3.匿名内部类

名内部类的格式:
	父类名/接口名 对象名 = new 父类名/接口名(){
        //重写父类或者接口中所有抽象方法
    };

三、权限修饰符
Java学习日记---多态、内部类、权限修饰符、代码块_第1张图片
四、代码块
1.定义
由一对大括号括起来的一句或者多句代码,称为一个代码块
2.构造代码块

构造方法代码块的格式:
	public class 类名{
        {
          	构造代码块的代码  
        }  
    }

构造代码块每次在调用构造方法创建对象之前执行
3.静态代码块

静态代码块的格式:

public class 类名{
    static{
         静态代码块
    }  
}

静态代码块随着类的加载而执行且执行一次,在构造方法之前执行

你可能感兴趣的:(Java学习日记---多态、内部类、权限修饰符、代码块)