面向对象编程5

在Java中,一个类能继承另一个类,是单继承,如果发现一个类需要继承多个类的时候,就要考虑接口实现。

       防盗门是一种门,它有一个锁。防盗门继承门,同时实现锁。防盗门是门类的一种(继承门类),具备一把防盗门专用锁,锁又归属于锁类,却又装在了防盗门上,成了防盗门的一部分。(防盗门的一部分继承了锁类)但我们不可以说防盗门是一种锁。

       像这样,防盗门与防盗锁具备“has-a”的关系时考虑接口,防盗门与门类具备“is-a”的关系时考虑继承。

       面向接口编程是面向对象编程体系中的精髓之一。同学们不仅要学会面向对象编程也要学会面向接口编程。

       在项目开发过程中,接口使用的非常广泛。

用法:

  1. 使用interface定义一个接口
  2. 一个类如果实现一个接口,就必须要把接口中所有的抽象方法全部实现
  3. 一个类实现接口使用implements

PS:可以定义一个抽象类,用implements去实现一个接口中部分的方法。

特征:

  1. 接口中的方法都是使用public static修饰的,即使不写public修饰,它也不是default修饰的,仍然是public修饰的,并且只能是public修饰;
  2. 接口不可以被实例化,这点和抽象类一样,接口中不能有构造器,而抽象类中可以有构造器。抽象类中虽然有构造器但是不能实例化一·个对象,这个并不影响构造器的存在,因为之前我们讲过,只要使用new关键字创建一个对象,就一定存在一个相应的构造器,但是构造的存在不能决定是否能够创建对象;
  3. 实现类必须实现所有的抽象方法,这点和抽象类不太一样,抽象类中可以不实现所有的抽象方法,那么此时这个类也必须定义为抽象类;
  4. 实现类可以实现多个接口
  5. 接口中的变量都是静态常量,默认修饰符是public static final,即使不写修饰词,它也是public static final修饰的,而不是default(缺省)
  6. 接口直接是可以相互继承的,而且可以多继承

注意:

  1. 接口表示一种能力,体现在接口的方法上
  2. 关心实现类有何能力,而不关心实现细节
  3. 面向接口的约定而不考虑接口的具体实现
  4. 接口是一种约定,体现在接口名称和注释上
  5. 程序设计面向接口的约定而不考虑具体实现

Java基础阶段的高频面试题:

       抽象类和接口的区别:

  1. 接口是一种特殊的抽象类;
  2. 一个类可以继承一个抽象类,同时可以实现多个接口;
  3. 类与类的继承是单继承关系,接口与接口继承是多继承关系;
  4. 抽象类和接口都不能实例化,但是抽象类可以有构造器,而接口中不能有构造器;
  5. 抽象类中可以有变量也可以有常量,可以有方法的定义也可以有方法的实现,而接口中只能有全局静态变量,默认修饰符是public static final,同时接口中只能有方法的定义而不能有方法的实现,默认修饰符是public abstract。

接口 interface:

C++支持多重继承,Java支持单重继承

C++多重继承的危险性在于一个类可能继承了同一个方法的不同实现,会导致系统崩溃。

Java中,一个类只继承一个类,但同时可以实现多个接口,既可以实现多重继承的效果和功能,也可避免多重继承的危险性。

class Students Person implements Runner,Flyer{…}

注意:extends必须位于implements之前

编码实现:

  1. 编写接口2、实现接口3、使用接口(用接口实现多态)

       接口、实现类、组装类和测试类

内部类(当作类中的一个普通成员变量,只不过成员变量是class的类型)

       就像一个Java文件中可以包含多个class,但是只能有一个public class

暂时了解定义位置,写法(使用)即可,为以后的多线程挖坑。

使用:

       创建内部类的时候,跟之前的方法不一样,需要在内部类的面前添加外部类来进行修饰

       例:OuterClass.InnerClass innerClass = new OuterClass().new InnerClass();(内部成员类)

特点:

  1. 内部类可以方便的访问外部类的私有属性
  2. 外部类不能访问内部类的私有属性,但是如果创建了内部类的对象,此时可以在外部类中访问私有属性
  3. 内部类中不能定义静态属性
  4. 当内部类和外部类具有相同的私有属性的时候,在内部类中访问的时候,可以直接访问内部类的属性,如果需要访问外部类的属性,那么需要添加 外部类类名.this.属性。

分类:

成员内部类:成员内部类是最普通的内部类,它的定义位于另一个类的内部。成员内部类可以访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。当成员内部类与外部类拥有同名的成员变量或方法时,会发生隐匿现象,即默认情况下访问的是成员内部类的成员。如果要访问外部类的同名成员,需要用

外部类.this.成员变量外部类.this.成员方法来访问。在外部类中如果想要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问。(外部类.内部类 类的名称 = new 外部类().内部类();

匿名内部类:当定义了一个类,实现了某个接口的时候,在使用过程中只需要使用一次,                  没有其他用途。其实考虑到代码编写的简洁,可以考虑不创建具体的类,而采

                     用new interface(){添加未实现的方法}就叫匿名内部类。(接口名称 对象名 =

                     new 接口名称{//匿名内部类内容+覆盖重写所有的接口抽象方法})。

                       

静态内部类:在内部类中可以定义静态内部类,使用static关键字进行修饰,使用规则

外部类.内部类 类的名称 = new 外部类.内部类();,静态内部类不可以直接访

问外部外部类非静态成员。

方法内部类:在外部类的方法中也可以定义类,此时叫做方法内部类(了解即可)

                     使用的时候需注意,只能在方法中创建对象,因为此class的作用域是当前方法。

                     注意:方法内部类(局部内部类)就像是在方法里面的一个局部变量一样,是不能用public、protected、private(访问控制符)和static这些修饰符修饰的。

             

垃圾回收机制(现在看看就行

对象空间的分配:使用new关键字创建对象即可

对象空间的释放:-传统的C++语言,需要程序负责回收已经分配内存。显式回收垃圾回收的缺点:(1)程序总忘记回收,从而导致内存泄露,降低系统性能。(2)程序错误回收程序核心类库的内存,导致系统崩溃。-Java语言不需要程序员直接控制内存回收,是由JRE在后台自动回收不再使用的内存,称为垃圾回收机制(Garbage Collection)。(1)可以提高编程效率。(2)保护程序的完整性。(3)其开销影响性能。Java虚拟机必须跟踪程序中有用的对象,确定哪些是无用的。

垃圾回收机制关键点(现阶段看看就行)

-垃圾回收机制只回收JVM堆内存里的对象空间。

-对其他物理连接,比如数据库连接、输入输出流、Sock连接无能为力

-现在的JVM有多种垃圾回收实现算法,表现各异。

-垃圾回收发生具有不可预知性,程序无法精确控制垃圾回收机制执行。

-可以将对象的引用变量设置为null,暗示垃圾回收机制可以回收该对象。

-程序员可以通过System.gc()或者Runtime.getRuntime().gc()来通知系统进行垃圾回收,会有一些效果,但是系统是否进行垃圾回收依然不确定。

-垃圾回收机制回收任何对象之前,总会先调用它的finalize方法(如果覆盖该方法,让一个新的引用变量重新引用该对象,则会重新继红对象)。

-永远不要主动调用某个对象的finalize方法,应该及哦啊给垃圾回收机制调用。

学习面向对象章节的注意事项

-大家不要希望学到现在就很精通面向对象,这只是开始。

-事实上,很多人如果要面向对象很精通,至少工作两年之后。

总结:

-封装

成员权限修饰符 private 默认 protected public

类权限修饰符 默认 public

-继承

 方法重写

 构造方法执行过程 super关键字

 Object类 重写toString() equals();

-多态

 使用父类做形参 使用父类做方法返回值

 向上转型 向下转型

-final

 final修饰类、成员变量、成员方法

-抽象类和抽象类的方法

 abstract

-接口

 interfere

 implements

 抽象类和接口的连续和区别

 模拟实现Comparable接口和Comparator接口

-内部类

 成员内部类 静态内部类 方法内部类 匿名内部类

-垃圾回收机制

 System.gc() 重写finalize()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值