Java基础04

Java面向对象

面向对象的三个基本特征

  1. 可重用性:它是面向对象软件开发的核心思路,提高了开发效率。面向对象程序设计的抽象、继承、封装和多态四大特点都围绕这个核心。
  2. 可扩展性:它使面向对象设计脱离了基于模块的设计,便于软件的修改。
  3. 可管理性:能够将功能与数据结合,方便管理。

继承性

  1. 这种层次形的分类方式,是为了将多个类的通用属性和方法提取出来,放在它们的父类中,然后只需要在子类中各自定义自己独有的属性和方法,并以继承的形式在父类中获取它们的通用属性和方法即可。
  2. 子类继承父类,可以获取父类的所有方法,私有的东西无法被继承
  3. 继承的本质是对某一批类的抽象, 从而实现对现实世界更好的建模。
  4. extends的意思是“扩展”。子类是父类的扩展
  5. JAVA中类只有单继承,没有多继承!
  • object类是Java中所有类的祖宗类
  • super调用父类的构造方法,必须在构造方法的第一个
  • super必须只能出现在子类的方法或者构造方法中!
  • super和this不能同时调用构造方法!

封装性

  • 封装的意义:提高系统安全性,保护数据,隐藏代码细节,统一接口,系统可维护性得到提升
  • Java 提供了私有和公有的访问模式,类的公有接口代表外部的用户应该知道或可以知道的每件东西,私有的方法数据只能通过该类的成员代码来访问,这就可以确保不会发生不希望的事情。

多态性

  1. 一个对象实际类型是确定的,但是可以指向的引用类型就不确定了:父类的引用类型可以指向子类的对象

    public class A extends B {
    
    
       public  void test() {
            B b = new A();
            System.out.println("A=>Atest");
        }
    }
    
  2. 用一个方法可以根据发送对象的不同而采取多种不同的行为方式。(多态是方法的多态,属性没有多态)

  3. 多态存在的条件

    • 有继承关系
    • 子类重写父类的方法
    • 父类引用指向子类对象
  4. 把子类转为父类,向上转型;

  5. 把父类转为子类,向下转型,强制类型转换,可能会丢失一些方法

类的本质用来组织代码(方法归类),封装数据的(理解提高成员变量的安全性)。

关键字

  • public:表示“共有”的意思。如果使用 public 修饰,则可以被其他类和程序访问。每个 Java 程序的主类都必须是 public 类,作为公共工具供其他类和程序使用的类应定义为 public 类。
  • abstract:如果类被 abstract 修饰,则该类为抽象类,抽象类不能被实例化,但抽象类中可以有抽象方法(使用 abstract 修饰的方法)和具体方法(没有使用 abstract 修饰的方法)。继承该抽象类的所有子类都必须实现该抽象 类中的所有抽象方法(除非子类也是 抽象类)。
  • final:如果类被 final 修饰,则不允许被继承。
  • class:声明类的关键字。
  • class_name:类的名称。
  • extends:表示继承其他类。
  • implements:表示实现某些接口。
  • property_type:表示成员变量的类型。
  • property:表示成员变量名称。
  • function():表示成员方法名称。

调用成员方法 4 点核心:

  1. 对无参成员方法来说,是没有实际参数列表的(即没有 paramList),但方法名后的括号不能省略
 public static void main(String[] args) {
        int[] Gao;  //数组的定义

        Gao = new int[20]; //创建一个数组

        //给数组赋值
        Gao[1] = 10;
        System.out.println(Gao.length);

        String a = new String("ABCD");
        System.out.println(a.length());

    }
  1. 对带参数的成员方法来说,实参的个数、顺序以及它们的数据类型必须与形式参数的个数、顺序以及它们的数据类型保持一致,各个实参间用逗号分隔。实参名与形参名可以相同,也可以不同。
  2. 实参也可以是表达式,此时一定要注意使表达式的数据类型与形参的数据类型相同,或者使表达式的类型按 Java 类型转换规则达到形参指明的数据类型。
  3. 实参变量对形参变量的数据传递是“值传递”,即只能由实参传递给形参,而不能由形参传递给实参。程序中执行到调用成员方法时,Java 把实参值复制到一个临时的存储区(栈)中,形参的任何修改都在栈中进行,当退出该成员方法时,Java 自动清除栈中的内容。

成员变量和局部变量的区别

  1. 定义的位置不同
    成员变量: 类体以内,方法体以外
    局部变量: 方法的声明上,或者方法体内

  2. 在内存的位置不一样
    成员变量: 在堆区分配内存
    局部变量: 在栈区分配内存

  3. 初始化值不一样
    成员变量: 系统赋予初始值
    byte short int long 0
    float double 0.0
    boolean false
    char \u0000
    引用类型 null
    局部变量: 方法的声明上,或者方法体内
    没有默认值,必须先声明再赋值再使用

  4. 变量的生命周期不一样
    生命周期: 变量从开始创建到销毁的全过程
    成员变量: 随着对象的创建而创建,随着垃圾回收器回收对象的时候销毁
    局部变量: 随着方法的调用而创建,随着方法调用结束而销毁

  5. 当成员变量和局部变量重名的时候,**局部变量优先,就近原则
    如果希望访问成员变量,需要使用this关键字 **

Static关键字

  • 类中的静态变量和方法,是在Java方法区的静态方法区的,而且在加载类之前static已经被申请了。
  • 静态代码块只执行一次
  • 执行顺序 静态代码块>匿名代码块>构造方法

抽象类

  • 抽象类方法是一种约束,只有方法,没有方法的实现
  • 不能new抽象类,只能靠子类去实现它:约束
  • 抽象类中可以写普通方法
  • 抽象方法必须在抽象类中
  • 抽象类有构造器,抽象类存在的意义:将一些共有的方法抽象出来,提高代码开发率,防止代码重复。

起到规范性的作用,一个项目组中往往是有多个人一起开发的,如果写到子类里面,不同的人写到方法名不同,这样看起来就没有规范性了

thissuper关键字的作用

  • this是对象内部指代自身的引用,同时也是解决成员变量和局部变量同名问题;

  • this可以调用成员变量,不能调用局部变量;

  • this也可以调用成员方法,但是在普通方法中可以省略this,在构造方法中不允许省略,必须是构造方法的第 一条语句。而且在静态方法当中不允许出现this关键字。

  • super代表对当前对象的直接父类对象的引用,super可以调用直接父类的成员变量(注意权限修饰符的影响,比如不能访问private成员)

  • super可以调用直接父类的成员方法(注意权限修饰符的影响,比如不能访问private成员);super可以调用直接父类的构造方法,只限构造方法中使用,且必须是第一条语句。

final和abstract关键字的作用

final和abstract是功能相反的两个关键字

  1. abstract可以用来修饰类和方法,不能用来修饰属性和构造方法;使用abstract修饰的类是抽象类,需要被继承,使

  2. 用abstract修饰的方法是抽象方法,需要子类被重写。

  3. final可以用来修饰类、方法和属性,不能修饰构造方法。使用final修饰的类不能被继承,使用final修饰的方法不能被 重写,使用final修饰的变量的值不能被修改,所以就成了常量。

  4. final修饰基本类型变量,其值不能改变,由原来的变量变为常量;但是fifinal修饰引用类型变量,栈内存中

    的引用不能改变,但是所指向的堆内存中的对象的属性值仍旧可以改变。

    举个栗子

    class Test { 
        public static void main(String[] args) { 
            final People people = new People("狂神"); 
            people.name = "秦疆";//正确 
            people = new People("秦疆");//错误 
        } 
    }
    
    
posted @ 2021-09-11 10:38  17_Xtreme  阅读(47)  评论(0编辑  收藏  举报