zoukankan      html  css  js  c++  java
  • Java(14):面向对象、封装、继承、方法重写、多态、抽象类与接口、内部类

    面向对象

    面向对象编程(Object-Oriented Programming,OOP)的本质:

    以类的方式组织代码,以对象的组织(封装)数据。

    使用new关键字创造对象

    使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用。

    类中的构造器也称为构造方法,是在进行创建对象的时候必须要调用的,并且构造器有以下两个特点:

    • 必须和类的名字相同。
    • 必须没有返回类型,也不能写void。

    init

    idea中 alt+insert 快速生成构造器代码,值得一提的是,构造器可以重载,如上图。

    have_a_look

    application:是脚本名。

    封装

    简单的说,封装就是属性私有,然后实现get/set方法获取/设置属性。

    属性私有:private关键字

    idea中 alt+insert 快速生成get/set代码.

    继承

    在Java中,所有的类默认直接或间接继承object类,只有单继承,没有多继承。

    extends关键字

    idea中 ctrl+H 浏览当前类的继承树.

    首先看下列代码,本类中的构造方法可以通过this([参数])来调用重载的其他构造方法,如图:

    有参调用无参构造方法

    其次,子类可以显式的调用父类的构造方法(通过super([参数])),和this()一样,必须方法首行。

    super

    由于this([参数])和super([参数])都必须要在第一行,因此两个方法不能同时出现。

    总结:

    this:对象本身,没有继承也可以使用。

    super:代表父类对象的引用,只能在继承条件下使用。

    this():本类的构造。

    super():父类的构造。

    方法的重写

    重写需要有继承关系,子类重写父类的方法:

    1. 方法名必须相同。
    2. 参数列表必须相同。
    3. 修饰符,范围可以扩大但是不能缩小:public > protected > default(什么都不写) > private
    4. 抛出的异常:范围不能扩大,但是可以缩小。

    chongxie

    方法的重写只和非静态方法有关,比如下面的代码:

    Studens继承Person,他们都一个名字和参数相同的static方法,执行实例化,如下:

    静态重写

    接着,去掉static ,再次执行代码,发现结果不一致,调用的都是子类的test():

    非静态重写

    最后,一知半解的override修饰符。

    override

    多态

    即同一个方法可以根据发送对象的不同而采用多种不同的行为方式.

    比如: Father f = new Son(); 这是多态。

    一个对象的类型是确定的,但可以指向对象的引用的类型有很多。

    存在条件:

    1. 有继承关系。Father Son
    2. 子类重写父类方法。 static方法(属于类,不属于实例)、final: 常量的 被这个修饰不能被改变、private方法不能被重写。
    3. 父类引用指向子类对象。Father f = new Son();

    注意:多态是方法的多态,没有属性的多态。

    fs

    父类型不能调用子类独有的方法:

    course

    如果一定要调用,需要将父类强制转换为子类:

    classTransf

    instanceof

    判断一个对象是什么类型,用法:obj instanceof Class。

    把子类转换为父类是由低到高转换,不需要强制转换,但是需要注意可能会丢失本来自己的一些方法,转换方式比如:Father obj = 子类对象;

    把父类转换成子类,由高到低需要强制转换。

    抽象类与接口

    普通类:只有具体的实现。

    抽象类:实现和规范(抽象方法)都有。

    接口:只有规范。

    抽象类

    抽象类的所有方法,继承它的子类都要实现它,除非它也是一个抽象类

    // abstract 抽象类
    public abstract class Action{
        // abstrcat,抽象方法,只有方法的名字,没有方法的实现。必须在抽象类中。
        public abstract void doSomething();
    }
    

    抽象类不能new, 只能靠子类去实现它。抽象方法必须在抽象类中。

    接口

    作用:约束和规范。不能被实例化,没有构造方法。implements实现接口。

    第一个接口:

    // interface 定义的关键字
    public interface InterfSsm{
        // 常量 public static final 一般不在接口定义常量
        int AGE = 99;
        
        // 接口中的方法默认都省略 public abstract
        void run(String name);
    }
    

    接口的实现:

    // implements关键字
    // 必须实现接口中的方法,且参数要一致
    public class Application implements InterfSsm{
        @Override
        public void run(String name) {
            System.out.println(name);
        }
    }
    

    再来一个接口,实现多接口继承:

    public interface InterPyy {
        void sing();
    }
    
    public class Application implements InterfSsm,InterPyy{
        @Override
        public void run(String name) {
            System.out.println(name);
        }
    
        @Override
        public void sing(){
            System.out.println("song");
        }
    }
    

    内部类

    在类中定义一个类。

    InnerClass

  • 相关阅读:
    家庭记账本安卓版开发:第六天
    django-自定义过滤器
    django-标签语法
    django-url的分发, 2)起别名, 3)根目录,4)rediect跳转函数:
    django-MTV基础篇
    django-第一天
    jquery---响应式方面应用
    css-基础知识
    HTML--第一章的基本知识
    003
  • 原文地址:https://www.cnblogs.com/zhangtu/p/14491119.html
Copyright © 2011-2022 走看看