• Java基础-面向对象


    一、Java中的成员变量和局部变量

    定义:成员变量直接定义在类中;局部变量定义在方法中,参数上,语句中。

    范围:成员变量在这个类中有效;局部变量只在自己所属的大括号内有效,大括号结束,局部变量失去作用域。

    生命周期:成员变量存在于堆内存中,随着对象的产生而存在、消失而消失;局部变量存在于栈内存中,随着所属区域的运行而存在,结束而释放。

    二、类的构造函数

    构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数的一种。所有对象创建时,都需要初始化才可以用。

    一个类在定义时,如果没有定义过构造函数,那么该类中会自动生成一个空参数的构造函数,为了方便该类创建对象,完成初始化。如果该类中自定义了构造函数,那么默认的构造函数就没有了。

    特点:

      • 该函数的名称和所在类的名称相同
      • 不需要定义返回值类型
      • 该函数没有具体的返回值

    三、面向对象的三大特征

    1、继承

    继承是面向对象程序设计能够提高软件开发效率的重要原因之一;

    继承是具有传递性的;

    继承来的属性和方法是隐式的,也就是在本类里面是看不见的;

    一个类只能有一个父类,也就是类只能是单继承;

    一个接口可以有多个父类,也就是接口可以是多继承。

    2、封装

    对象数据和操作该对象的指令都是对象自身的一部分,能够实现尽可能对外部隐藏数据;

    实际项目开发中,使用封装最多的就是实体类,常常和JavaBean(类必须是具体的和公共的,并且有无需参数的构造器)一起使用;

    那么,实体类通常包含:私有的成员变量、五参数的构造函数、有参数的构造函数、setter和getters方法、重写tostring方法、重写hashCode和equals方法。

    3、多态

    多态就是对象拥有多种形态:应用多态和方法多态。

    引用多态:父类的引用可以指向本类对象、父类的引用可以指向子类的对象

    方法多态:创建本类对象时,调用的方法为本类的方法;创建子类对象时,调用的方法为子类重写的方法或者继承的方法。

    存在多态的必要条件:继承、重写

    多态的作用是消除类型之间的耦合关系

    在实际项目开发中,A类继承B类,如果在A类中不重写B类中的方法时,输出的仍旧是B类方法里面的信息;如果在A类中重写B类的方法的时候,输出的是A类方法里面的信息。

    四、Java中抽象类

    定义:在不断抽取过程中,将共性内容中的方法生命抽取,但是方法不一样,没有抽取,这样抽取到的方法,并不具体,需要被指定关键字abstract锁标示,生命为抽象方法。

    抽象方法所在的类一定要标示为抽象类,也就是说该类需要被abstract关键字锁修饰

    特点:抽象方法只能定义在抽象类中,抽象类和抽象方法必须由abstract关键字修饰(可以描述类和方法,不可以描述变量)。

    抽象方法只定义方法生命,并不定义方法实现。

    抽象类不可以被创建对象(不可以实例化)

    只有通过子类继承抽象类并覆盖抽象类中的所有抽象方法后,该类才可以实例化。否则,该子类还是一个抽象类。

    注意:

    抽象类中是否有构造函数?有,用于给子类对象进行初始化抽象类是否可以定义非抽象类?可以。其实,抽象类和一般的类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。所以抽象类和一般类在定义上,都是需要定义属性和行为的。只不过,比一般类多了一个抽象函数。而且比一般类少了一个创建对象的部分抽象关键字abstract和哪些不可以共存final,private,static抽象类可不可以不定义抽象方法?可以。抽象方法目的仅仅为了不让该类创建对象

    五、Java中抽象类和接口的区别

    1、抽象类只能被继承,而且只能单继承;接口需要被实现。而且是多实现

    2、抽象类中可以定义抽象方法和非抽象方法,子类可以直接继承使用;接口中方法只有方法体没有方法的实现,需要子类实现。

    3、抽象类使用的是  is-a关系;接口使用的是 like-a关系

    4、抽象类的陈孤雁修饰符可以自定义;接口中的成员修饰符是固定的,全部是public的

    六、static、final、this、supper关键字总结

    1、final关键字

    final关键字主要用在三个地方:变量、方法、类

      • 对于一个final变量,如果是进本数据类型的变量,则其数值一旦在初始化后便不能更改;如果是引用类型的变量,则在其初始化之后不能再让其指向另一个对象。
      • 当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式的指定为final方法
      • 使用final方法的原因有两个:第一个原因就是把方法锁定,以防止任何类继承修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用,但是如果方法过于庞大,可能看不到内嵌调用带来的额任何性能的提升(现在的Java版本已经不需要使用final放阿飞进行这些优化了)。类中所有的private方法都隐式的指定为final。

    2、static关键字

    static关键字主要有以下四种使用场景

    • 修饰成员变量和成员方法

    被static修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。被static声明的成员变量属于静态成员变量,静态变量存放在Java内存区域的方法区。调用格式:类名.静态变量名;;类名.静态方法名()。

    • 静态代码块

    静态代码块定义在类中方法外,静态代码块在非静态代码块之前执行(静态代码块—>非静态代码块—>构造方法)。该类不管创建多少对象,静态代码块只执行一次。

    • 静态内部类(static修饰类的话只能修饰内部类)

    静态内部类与非静态内部类之间存在一个最大的区别:非静态内部类在编译完成之后会隐含地保存一个引用,该引用是指向创建它的外围类,但是静态内部类却没有。没有这个引用就意味着:1、它的创建时不需要依赖外围类的创建。2、它不能使用任何外围类的非static成员变量和方法。

    • 静态导包(用来导入类中的静态资源,1.5之后的新特性)

    格式为:import static

    这两个关键字连用可以指定导入某个类中的指定静态资源,并且不需要使用类名调用类中的静态成员,可以直接使用类中静态成员变量和成员方法。

    3、this关键字

    this关键字用于引用类的当前实例。例如:

    class Manager{
        Employees[] employees;
        void manageEmployees(){
            int totalEmp=this.employees.length;
            System.err.println("total emploees:"+totalEmp);
            this.report();
        }
            
        void report(){}
    }

    在上面的示例中,this关键字用于两个地方:

    this.employees.length;访问Manager的当前实例的变量

    this.report();调用Manager的当前实例的方法。

    此关键字是可选的,这意味着如果使用上面的示例在不使用此关键字的情况下表现相同。但是,使用此关键字可能会使代码更易读或易懂。

    4、supper关键字

    supper关键字用于子类访问父类的变量和方法。例如:

    public class Super {
        
        protected int num;
        
        protected void showNUmber(){
            System.err.println("number="+num);
        }
        
    }
    
    public class sub extends Super{
        void bar(){
        super.num=10;
        super.showNUmber();
        }
    }

    在上面的例子中,sub类访问父类成员变量number并调用其父类super的showNumber()方法。

    使用this和super要注意的问题:

    super调用父类中的其他构造方法时,调用时要放在构造函数的首行。this调用奔雷中的其他构造方法是,也要放在首行。

    this。super不能用在static方法中

    简单解释一下:

    被static修饰的成员属于类,不属于单个这个类的某个对象,被所有对象共享。而this代表对本类对象的引用,指向本类对象;而super代表父类对象的引用,指向父类对象。所以,this和super是属于对象范畴的东西,而静态方法数属于类范畴的东西。

  • 相关阅读:
    Asp.Net MVC4开发二: Entity Framework在Asp.Net MVC4中的应用
    敌兵布阵(杭电1166)(树状数组)
    alibaba dexposed初步解析
    shell学习三十二天----read读取一行
    cocos2d-x CCScrollView 源代码分析
    语言-编程语言:Python
    GitHub:Python
    GitHub-Microsoft:DotNet4
    GitHub-Microsoft:DotNet3
    GitHub-Microsoft:DotNet2
  • 原文地址:https://www.cnblogs.com/houqx/p/13385928.html
Copyright © 2020-2023  润新知