一、面向对象核心

 

 

java三大特性

  封装

   封装:是面向对象的核心,将属性和方法(操作)封装在类中,然后通过类进行调用,这样很方便;

       子类继承了父类的属性和方法;

   将内部的一些细节进行屏蔽,方便大型项目的设计;

  继承

    继承:通过抽象,将所有的共性的东西进行抽象定义为父类,子类使用extends进行继承,方便代码的复用;

    java只支持单继承但是可以允许多重继承;

    object类:是所有一切类的父类,所有的类都是直接或者间接地继承该类;

getClass().getName();    //getClass()返回当前类的实例,然后使用object类中的    getNAME()方法返回类名; 
toString();    //返回类的字符串表示形式
s1.equals(s2);    //比较两个对象的地址是否相同

        在java中,如果声明的两个变量(不一定描述正确)的值相同,那么两个变量的地址就是相同,使用equals方法的时候就hi显示相同;

    方法重写:方法重写和重载没有半毛钱关系,是在继承的时候,父类的某些方法并不适合子类,因此需要进行重写;(重写实现的内容,权限,返回值类型均可)。

    方法重构:相较于方法重写,只有实现的内容部分不一样,其他的均相同。

    super关键字:如果子类的变量和父类的变量或者方法相同的时候,正常调用会出现覆盖,这时使用super关键字来调用父类的方法或属性; 

  多态

    一种定义,多种实现;

    多态实现体现:

      一、方法重载

        方法名字相同,但是传递的形参的类型,数量,顺序不同,起源于构造方法;

      二、上下转型

        上转型:继承的时候是子类继承父类,那么将子类转成父类的时候,可以理解为从特殊到一般的过程,是安全的,例如:鸽子类继承鸟类,可以说鸽子是鸟;

            上转之后的对象只能操作父类的方法和变量,子类独有的属性和方法是不能调用的;

            如果子类重写了父类的方法,上转之后,父类调用的方法是子类的方法;

        下转型:是从一般到特殊的过程,该方式通常是不安全的;

            子类首先转成父类,然后父类再转成子类的时候需要强制转换,如果直接将父类实例赋值子类对象对报错;

      instanceof关键字:判断某一个父类是否是子类的实例,返回值是布尔类型;

 

抽象类和接口

  抽象类

    在现实世界中,有时候我们无法用语言具体描述某些事物的时候,可以使用抽象类,

    使用abstract定义;

    抽象方法不能直接实例化,被继承的时候,要重写所有的抽象方法,除非抽象类继承抽象类,不需要。

  接口

    接口是抽象的延伸,接口中所有的方法没有方法体都是抽象方法;

    使用interface关键字定义,首字母大写(约定俗成);

    类通过implements关键字实现接口,必须重写接口中所有的方法;

    一个类可以多重继承多个接口,但是会造成代码量大,程序复杂;

    一个接口可以继承多个接口;

  两者区别:(常规区别不说)

    抽象类中的成员变量可以是任意类型,接口中的成员变量只能是静态常量;

    抽象类中可以有静态代码块和方法,接口不行;

    抽象类可以有构造方法,接口没有构造方法;  

    

访问控制

  private:在本类中有效

  default:在同一个包中有效

  protected:在其他包的子类

  public:整个项目中都有效

  使用原则:

public和protected修饰的类可以由子类访问,如果不在同一个包中,只能为public对子类进行访问;
如果父类不允许通过继承产生的子类访问它的成员变量,就必须使用private进行父类的相应声明;

  package关键字:主要是为了控制类重名冲突问题,方便管理文件;

          在调用包中的方法的时候,需要先用import包导入;

  final关键字:修饰变量不允许改动(也叫常量),修饰方法的时候不允许重写;

 

内部类

  如果一个类在另外一个类中是成员,那么就是内部类;

  意义:开发程序的模型变成了“组合”的形式,例如:汽车类中组合了发动机类,车轮类等等,这样能够更好开发程序;

  成员内部类:

        将内部类作为一个外部类中的成员,在初始化的外类的时候,内部类就和外部类进行了绑定,调用内部类中的变量或方法的时候就要 “一点再点”。

  匿名内部类:

        只使用一次,创建实例后消失,

        没有构造方法;

        不能有静态成员;

        只能用默认权限修饰符,不能用final,static,abstract修饰

abstract class OutClass{
    abstract void say();
}

public class TestInClass {
    public static void main(String[] args) {
        
        new OutClass() {
            void say() {
                System.out.println("内部类测试");
            }
        }.say();
    }
}

 

 

 

  

 

posted @ 2020-05-06 18:18  利兵秣码  阅读(294)  评论(0)    收藏  举报