美文网首页
Java内部类.继承.多态

Java内部类.继承.多态

作者: 南在南方i | 来源:发表于2019-08-10 22:10 被阅读0次

类里边包含:成员变量/构造方法/方法/代码块/内部类/继承/多态/组合

在创建一个对象之前需要做点事情

  • 构造函数
  • 静态变量
  • 静态方法 必须主动调用才执行

代码块

  • 在对象被创建之前就优先会被调用
  • 修饰符 {
    预先执行的内容
    }
  • 类里面可以有多个代码块
  • 执行顺序和出现的先后顺序相同
  • 尽量不要在一个类里写多个代码块 先后执行顺序因此可以只用一个代码块

静态代码块

  • 格式
    在java类中(方法中不能存在静态代码块)使用static关键字和{}声明的代码块:
static {
        //age = 30; 静态代码块里面不能调用成员变量和实例方法
        System.out.println("静态代码块");
    }
  • 执行时机
    静态代码块在类被加载的时候就运行了,而且只运行一次,并且优先于各种代码块以及构造函数。如果一个类中有多个静态代码块,会按照书写顺序依次执行。后面在比较的时候会通过具体实例来证明
  • 静态代码块的作用
    一般情况下,如果有些代码需要在项目启动的时候就执行,这时候就需要静态代码块。比如一个项目启动需要加载的很多配置文件等资源,我们就可以都放入静态代码块中。
  • 静态代码块不能访问普通变量
    这个理解思维同上,普通变量只能通过对象来调用,是不能放在静态代码块中的
public Person(){
        System.out.println("默认的无参构造方法 age="+age);
    }
    public Person(int age){
        this.age = age;
        System.out.println("有参构造方法");
    }

定义类

定义一个类,可以在多个地方定义

  • 单独创建一个文件管理一个类
  • 直接在文件里面 类A的上面和下面创建
  • 直接在某个类A内部创建一个类
    一个类A需要依附于另一个类B

内部类

所谓内部类就是在一个类内部进行其他类结构的嵌套操作

内部类的优点

  • 内部类与外部类可以方便的访问彼此的私有域(包括私有方法、私有属性)
  • 内部类是另外一种封装,对外部的其他类隐藏
  • 内部类可以实现java的单继承局限

内部类的缺点

  • 结构复杂

封装

面向对象方法的重要原则,就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽可能隐藏对象的内部实现细节

  • 使用private把关键的,没必要给其他人看的逻辑和熟悉密封好,装起来,不让其他人看
  • 减少其他人看你类的时间,让调用的人看你代码更简单
  • 由于属性和某些方法封装起来了,那让你的代码逻辑更安全!

继承

子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为

  • 获得父类的方法和属性 并且需要添加自己的属性和方法
  • Java里面只能单继承 可以变相的多继承
  • 所有的类都是直接或者间接继承于Object类
  • 当调用子类的一个方法时 如果没有就会到父类去查找
  • 如果在子类需要调用父类的方法或者显示调用父类的属性使用super
  • 什么情况下需要在一个方法里面调用super的对应方法
public void walk() {
        super.walk();
    }
  • 如果一个方法需要一个功能 又不能单独完成 必须要父类做相应的工作
    1.父类做完之后 子类再操作
    2.子类做点事情之后 再调用父类去完成
  • 如果父类有自定义构造方法
    子类的构造方法里必须显示调用父类的构造方法
  • 如果父类有内部类
    子类中有同名的内部类
    那么父类中的内部类就被屏蔽了
    如果非要使用父类中的内部类 只能使用全类名 Person1.内部类名

多态polymorphic

1.同一个方法 多种实现=在不同的子类中有不同的实现
2.如果有继承关系:子类的对象可以使用父类变量接收 类型的自动向上转换


demo知识融合

package demo;

import java.util.ArrayList;

public class Person {
    String name;
    int age;
    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }

    public void walk(){

    }

    public void eat(){

    }
}

class civilServant extends Person{
    int salay;
    int count;
    public  civilServant(String name,int age,int salay,int count){
        super(name,age);
        this.salay = salay;
        this.count = count;
    }

    @Override
    public void walk() {
        System.out.println("慢慢走路");
    }

    @Override
    public void eat() {
        System.out.println("慢慢吃饭");
    }

    public void cShow() {
        System.out.println("civilServant{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salay=" + salay +
                ", count=" + count +
                '}');
    }
}

class officl extends Person{
    int salay;
    String tec;
    public officl(String name,int age,int salay,String tec){
        super(name,age);
        this.salay = salay;
        this.tec = tec;
    }

    @Override
    public void walk() {
        System.out.println("快快地走");
    }

    @Override
    public void eat() {
        System.out.println("快快吃饭");
    }

    public void oShow() {
        System.out.println("officl{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salay=" + salay +
                ", tec='" + tec + '\'' +
                '}');
    }
}

class Test{
    public static void main(String[] args){
        ArrayList<Person> peoples = new ArrayList();
        Person c1 = new civilServant("张三",25,13000,45);
        Person c2 = new civilServant("李四",21,15000,24);
        Person c3 = new civilServant("王五",30,14400,30);
        Person c4 = new civilServant("FCF",26,10540,42);
        peoples.add(c1);
        peoples.add(c2);
        peoples.add(c3);
        peoples.add(c4);

        Person o1 = new officl("渣渣辉",19,5000,"自动加血");
        Person o2 = new officl("古天乐",28,6800,"开局满蓝");
        Person o3 = new officl("林子聪",20,9500,"双倍经验");
        peoples.add(o1);
        peoples.add(o2);
        peoples.add(o3);

        for (Person p : peoples){
            if (p instanceof civilServant){
                civilServant c = (civilServant)p;
                c.cShow();
                c.walk();
                c.eat();
            }else {
                officl o =(officl)p;
                o.oShow();
                o.walk();
                o.eat();
            }
        }
    }
}

PS.

今天最开始单独做了一个demo,刚开始有一种无从下手的感觉,才发现自己的问题。以前上课听的时候自我感觉良好,殊不知什么都只是学到了皮毛而已。经过讲解之后才找到了一丝熟悉的感觉,希望自己能踏踏实实做个人吧

相关文章

  • 面向对象三大特性

    三大特性:继承 封装 多态 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来实现多继承。 封装 封...

  • Java内部类.继承.多态

    类里边包含:成员变量/构造方法/方法/代码块/内部类/继承/多态/组合 在创建一个对象之前需要做点事情 构造函数 ...

  • 2019-06-22

    Java 基础部分面向对象封装 继承 多态集合框架泛型打包高级内部类Lambda网络编程多线程i/o操作swing...

  • 2020-07-08 腾讯客户端开发面试

    项目经历 java 三大特性?java 可以多继承吗?如何实现多继承?多态有哪些类型?封装,继承,多态;不可以;接...

  • Java笔记

    Java基础 Java面试通关要点 1.面向对象的特征 封装 继承 多态 封装继承多态 2.final,final...

  • 【Java学习】代码块|内部类|继承|多态

    心得感悟 感觉今天仍然是需要多加理解的一天,不过经过一次布置的程序编写作业后,自己的理解加深了。我自己也有在网上各...

  • JAVA-------代码块、内部类、继承、多态

    代码块 在创建一个对象之前需要做点准备工作代码块: 在对象创建之前就会被调用修饰符{预先执行的内容}1.类里面可...

  • JAVA-(代码块、内部类、继承、多态)

    心得体会 风平浪静、晴空万里的一天。一个人想要认真的学习,学习氛围很重要。我比较习惯一个人学习,有时候遇到问题就自...

  • 面向对象总结

    面向对象思想 类与对象 定义类格式: 面向对象的三大特征 封装 继承 多态: 抽象类 接口 内部类 匿名内部类: ...

  • Java的基本特性

    关系 Java的四个基本特性分别是抽象,封装,继承,多态。概括起来可以这么理解,抽象、封装、继承是多态的基础,多态...

网友评论

      本文标题:Java内部类.继承.多态

      本文链接:https://www.haomeiwen.com/subject/iifdjctx.html