java学习之面向对象编程--类与对象知识总结

       这几天认真地研究了一下类与对象,有很大的收获,所以在这以博客的形式和大家分享一下我的心得,不足之处还希望大家多提建议,有帮到读友的部分的话我也是很开心,接下来就是总结了。

 

一:面向对象编程

三大特点:继承,封装与多态

        所谓封装,也就是把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让可信的类或者对象操作,对不可信的进⾏信息隐藏。简⽽⾔之就是,内部操作对外部⽽⾔不可⻅(保护性)
        继承是指这样⼀种能⼒:它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展。

        所谓多态就是指⼀个类实例的相同⽅法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接⼝。(利⽤多态可以得到良好的设计)

二:类与对象

一个类的定义中,一般包括几个部分。

       1.类的属性。2.类的构造函数.。3.成员方法。

例如:

class TestDome{
    private String  name;       // 成员属性
    private int age;

    public TestDome(String name,int age){
        this.age = age;
        this.name = name;       //构造函数
    }
    public TestDome(String name){
        this.name = name;       //构造函数
    }

    public void Studay(){
        System.out.println(this.name+" "+this.age+" "+"我爱学习");
    }                           //成员方法
}
public class Test {
    public static void main(String[] args) {
       TestDome testDome = new TestDome("小明",18); //实例化对象
       TestDome testDome1 = new TestDome("小红");
        testDome.Studay();
        testDome1.Studay();

    }
}

运行结果:

其中,构造函数可以重载,具体的差异在参数的个数中体现。

 

 Person:基类--》父类--》超类
 Student:派生类--》子类
 1、派生类继承了基类,继承了什么东西?
   除构造函数外的其他东西。
  派生类需要帮助基类构造
  2、super
      super();//调用基类的构造函数
      spuer.data;//访问基类的属性
      super.func()//调用基类的成员函数
     不允许被继承,密封类
     final  class B{

     }
     密封方法  ===》不能被重写
      public final void func() {
          System.out.println("Person.func()");
      }

三:this

如何理解this?

它是对当前对象的引用,以下是他的作用:

1.调用属性

2.调用函数

3.调用构造函数(必须放在第一句)

代码例子:

class TestDome{
    
    private String  name;       // 成员属性
    private int age;

    public TestDome(String name,int age){
        this.age = age;
        this.name = name;       //调用属性
    }
    public TestDome(){
        this("小王",20);
    }                           //调用构造函数
    public void Fun(){
        this.Studay();
    }                           //调用方法
    
    
    public TestDome(String name){
        this.name = name;       //构造函数
    }
    
    public void Studay(){
        System.out.println(this.name+" "+this.age+" "+"我爱学习");
    }                           //成员方法
    
}

四:对象属性的初始化方式

对象属性的初始化方式

1.提供一系列的get 和 set 方法

2.提供合适的构造函数 (对象的产生需要以下几步,2步, 1 为对象开辟内存,2. 调用合适的构造函数 构造函数不只有一个)

3.静态代码块和实例代码块

static{}  静态代码块                        {}    实例代码块

注意:

静态代码块只会被初始化一次 在打印时静态代码块 跑在第一位 接着是实例代码块 最后为构造函数实例化

 

五:数组的拷贝方式

 

数组的拷贝有以下4种方式

for\ clone()\ system.arraycopy()拷贝最快 (底层函数由 native 所修饰 底层函数由C/C++完成 效率最高)\ Arrays.copyOf()

1.for循环拷贝

int[] arr = {1,2,3,4,5,6,7,8,9,10};
int[] arr1 = new int [10];
for (int i = 0; i < arr.length ; i++) {
     arr1[i] = arr[i];
}
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(arr1));
}

2.Arrays.copyOf()

例如:arr1 = Arrays.copyOf(arr,10);

3.clone()

例如:arr1 = arr.clone();

4.system.arraycopy()

例如:System.arraycopy(arr,0,arr1,0,10);  目标数组,目标数组拷贝起始地址,目的数组,目的数组的保存起始地址,拷贝长度

他们对于基本类型来说都是是深拷贝(对拷贝对象的值没有影响)

2. array2 = array.clone(); 原地址消失,新建一个地址克隆目标数组 4种拷贝方式对于引用类型来说是浅拷贝

函数被static 所修饰,谁在前谁先使用

 

第二部分:

内部类

1.成员(实例内部类) 静态 方法 匿名 内部类 4种

class InnerClass{

}

class OuterClass{

}

 

4种访问权限 protected  public   private   包访问权限

在构造函数中 没有有修饰的变量的访问权限默认为包访问权

 

一:实例内部类

问题1:如何访问实例内部类?

通过外部类对象访问

实例内部类无法定义static 的数据成员 可以 使用final 完成

 

如果先初始化实例内部类,会引起初始化异常,static 先进行初始化,而实例内部类则是后初始化

final是在编译期间就确定的值

例如: public static final int a = 100;

 

问题2:实例内部类对象是否哟额外的内存消耗?

有额外的消耗 外层内部类的this 访问权限

 

二:静态内部类

 

静态内部类的访问只需要点(.)出来

静态内部类能否访问外部类的实例数据成员

可以 在内部类中拿到一个外部类对象 并且有参数

例如:System.out.println(this.out.data2);

 

 

三:本地(局部)内部类

先写一个外部类

包含 元素 构造函数 方法

在定义一个类 (在方法的内部定义一个类)

这就是本地的内部类

 

四:匿名内部类

回调函数

Ctrl+O IDEA 重写的快捷键在方法的内部

五:继承 extends

作用:代码的重用性

具体实现:继承了除了构造函数之外的其他的东西

操作代码例:

super(age,name) 调用基类的构造函数 必须放在第一行

super.data;访问基类的属性

super.func();调用基类的成员函数

 

invokespecial 代表构造函数

invokevirtual 普通的方法 虚函数

invokestatic 静态方法

overload 重载 函数名相同 参数列表不同 返回值不要求

override 重写 函数名相同 参数列表相同 返回值相同

 

六:多态  

基类引用派生类的对象并且基类和派生类有同名的覆盖方法 (向上转型)

也就是重写方法 方法表地址的覆盖

向下转型需先进行 向上转型

运行时多态 动多态

静多态 : 调用静态函数

 

方法表在编译时生成

class对象在方法区 保存的是对象的RTTI信息 runtime type infomation

和类型一一对应

 

final 加上之后不可修改,(不能被重写) 不允许被继承 这是代表密封类

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值