栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 总结2 类与对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 总结2 类与对象

    • 2.1 构造器(构造方法)
    • 2.2 继承
      • 多态
      • 动态绑定
      • instanceof 运算符
      • 转换对象
      • 方法重写
    • 2.3 类成员
    • 2.4 final 终极类 终极方法 常量
      • 终极类
      • 终极方法
      • 常量(终极变量)
    • 2.5 抽象
      • 抽象类
      • 抽象方法
    • 2.6 接口
      • 接口回调 ???
    • 2.7 内部类 封装类
      • 成员类

2.1 构造器(构造方法)
  • 若开发者自定义了构造器,那么最好包含一个空的构造方法
  • 在类的成员方法中访问成员变量可以用this指明访问的成员:this.member
2.2 继承
  • Java只允许单重继承
多态

多态性 是指同一名字的若干个方法,有不同的实现。通过重载和重写实现的

动态绑定

动态绑定机制:假设对象object是类C1,C2,…,Cn-1和Cn的实例,其中,C1是C2的子类,C2是C3的子类,…,Cn-1是Cn的子类,如果对象object调用一个方法m,Java虚拟机依次在类C1,C2,…,Cn-1,Cn中查找方法m的实现,直到找到为止(即 从子类向超类查找)

instanceof 运算符

instanceof:用于判断对象是否是某类的示例,Object instanceof Class

转换对象

超类引用可以指向子类对象:SuperClass object = new ThisClass();

方法重写
  • 重写:子类不需要从超类继承来的方法,可以使用相同的方法名,定义自己适用的方法
  • 对于重写的同名方法,子类方法的访问权限要比超类方法的访问权限更松
  • 子类如果想使用已被重写的超类方法,可以使用super关键字来调用
  • 若在子类的构造器中需要调用超类的构造器,则调用语句一定要在子类构造器的第一行
2.3 类成员
  • 静态变量(类变量):static关键字标记的变量
  • 静态方法(类方法):static关键字标记的方法
2.4 final 终极类 终极方法 常量
  • final:用final修饰的变量、方法、类不能被改变;类似C和C++中的const关键字
终极类

终极类:被final关键字标记的类

final class FinalClassName { ... }
  • 终极类不能被继承,不能有子类
  • 终极类的成员方法被默认设置为终极方法
终极方法

终极方法:被final关键字标记的方法;终极方法不能被重写

常量(终极变量)
  • final 通常和 static 修饰符一起使用来创建类常量,该变量一旦赋值后,不能被重新赋值
  • 被 final 修饰的实例变量必须显式指定初始值;
  • final方法能被继承,不能被子类重写
2.5 抽象 抽象类

抽象类:类中没有包含足够的信息来描绘一个具体的对象,Java中用 abstract class 定义抽象类

abstract class AbstractClassName { ... }
  • 抽象类不能被实例化,必须被非抽象子类继承后才能使用
  • 抽象类中可以有非抽象方法和抽象方法,而包含抽象方法的类一定是抽象类
抽象方法

抽象方法:抽象类包含的特别的成员方法,该方法的具体实现由它的子类确定

public abstract <返回值类型> AbstractMethod(...) {};
  • 抽象类中的抽象方法只是声明,不包含方法体,不给出方法的具体实现功能
  • 抽象类的子类必须给出抽象类中的抽象方法的具体实现,除非该子类也是抽象类
  • 如果所有子类都具有某方法,并且该方法在不同子类中实现代码不同,一般做法是将该方法设置为超类的抽象方法
2.6 接口

在面向对象设计中,Interface接口 表示 功能
接口中的方法成员被默认设定为public abstract类型

public interface InterfaceName {
    void Method(); //等同于public abstract void Method();
}
  • 接口的数据成员一定要赋初值(即只能有常量)
  • 接口的方法成员一定要被非抽象的实现类实现(一个类声明实现一个接口,但没有重写接口中的所有方法,则这个类是抽象类)
接口回调 ???

Java中,接口回调是指 可以把实现某接口的类的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口方法

2.7 内部类 封装类

在一个类或接口内部声明的类,包括:成员类,局部类,匿名类

成员类

成员类是在封装类或封装接口中作为成员声明的类

  • 非静态成员类:
    • 不能定义静态变量和方法
    • 可以访问封装类的所有成员
    • 访问重名的封装类成员:封装类名.this.成员名;
    • 访问不重名的封装类成员,可以直接通过成员名进行访问
    • 在封装类外创建非静态成员类的对象时,需要先创建封装类的对象,然后用封装类名.非静态成员类名 变量名=封装类对象名.new 非静态成员类名(); 来创建非静态成员类实例
public class EnclosingClass {
    static String name="EnclosingClass"; //静态成员变量
    int x = 5, y = 6; //非静态成员变量


    public void print1() { System.out.println("封装类的非静态方法"); }
    static public void print2() { System.out.println("封装类的静态方法"); }
    
    // 非静态成员类(不能定义静态成员变量和方法)
    class MemberClass1{
        String name="MemberClass1";
        int x;
        public void display() {
            // 1)访问成员类的成员变量
            System.out.println("MemberClass1.name="+name);
            x = y; //直接使用封装类的成员变量名
            System.out.println("MemberClass1.x="+x);
            // 2)访问封装类的静态变量和方法
            System.out.println("EnclosingClass.name="+EnclosingClass.name);
            EnclosingClass.print2();
            // 3)访问封装类的非静态变量和方法
            System.out.println ("EnclosingClass.this.x="+EnclosingClass.this.x);
            EnclosingClass.this.print1();
        }

    }
    public static void main(String[] args) {
        //创建封装类实例
        EnclosingClass ec=new EnclosingClass () ;
        //在封装类之外创建非静态成员类实例
        EnclosingClass.MemberClass1 emc=ec.new MemberClass1();
        emc.display();
    }
}
  • 静态成员类:
    • 静态成员类中既可以定义静态成员,也可以定义非静态成员
    • 静态成员类中能直接访问封装类的所有静态成员,但不能直接访问封装类的非静态成员
    • 访问重名的封装类成员:封装类名.封装类静态成员名;
    • 访问不重名的封装类成员,可直接通过成员名进行访问
public class EnclosingClass {
    String name = "Tom";
    static int x = 765;
    public String getString() { return this.name;}

    static class MemberClass {
        String name = "Cat";
        static int x = 432;

        public static void show() {
            //System.out.println("MemberClass.name="+name); //类的静态方法不能访问该类的非静态成员
            System.out.println("MemberClass.x="+x);
            //System.out.println("EnclosingClass.name"+EnclosingClass.name);  //静态成员类中不能直接访问封装类的非静态成员
            System.out.println("EnclosingClass.x="+EnclosingClass.x);  //静态成员类中能直接访问封装类的所有静态成员

        }
        public void show2() {
            System.out.println("MemberClass.name="+name);
            System.out.println("MemberClass.x="+x);
            //System.out.println("EnclosingClass.name"+EnclosingClass.name);  //静态成员类中不能直接访问封装类的非静态成员
            System.out.println("EnclosingClass.x="+EnclosingClass.x);
        }
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/458730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号