栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java面向对象

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java面向对象

主要内容

final关键字

抽象类

接口

抽象类与接口的区别

Object类

package和import

访问权限控制

final关键字

final表示不可改变的含义

 1. 采用final修饰的类不能被继承

 2. 采用final修饰的方法不能被覆盖 

 3. 采用final修饰的变量不能被修改 

4. final修饰的变量必须显示初始化

5. 如果修饰的引用,那么这个引用只能指向一个对象,也就是说这个引用不能再次赋值,但被指向的对象是可以修改的 

6. 构造方法不能被final修饰

7. 会影响JAVA类的初始化:final定义的静态常量调用时不会执行java的类初始化方法,也就是说不会执行static代码块等相关语句,这是由java虚拟机规定的。我们不需要了解的很深,有个概念就可以了。

抽象类

1. 在java中采用abstract关键字定义的类就是抽象类,采用abstract关键字定义的方法就是抽象方法

2.抽象的方法只需在抽象类中,提供声明,不需要实现

3. 如果一个类中含有抽象方法,那么这个类必须定义成抽象类

4.如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被重写。如果在子类中  不复写该抽象方法,那么必须将此类再次声明为抽象类

5. 抽象的类是不能实例化的,就像现实世界中人其实是抽象的,张三、李四才是具体的

6. 抽象类不能被final修饰

抽象方法不能被final修饰,因为抽象方法就是被子类实现的 抽象类中可以包含方法实现,可以将一些公共的代码放到抽象类中,另外在抽象类中可以定义一些抽象的方法,这样就会存在一个约束,而子类必须实现我们定义的方法,有了多态的机制,我们在运行期就可以动态的调用子类的方法。所以在运行期可以灵活的互换实现。 

 采用abstract声明抽象类
 class AbstractTest01 {
     public static void main(String[] args) {
         //不能实例化抽象类
         // 抽象类是不存在,抽象类必须有子类继承
    //Person p = new Person();
    //以下使用是正确的,因为我们new的是具体类
    Person p1 = new Employee();
    p1.setName("张三");
    System.out.println(p1.getName());
     }
 }
 //采用abstract定义抽象类
// 在抽象类中可以定义一些子类公共的方法或属性
// 这样子类就可以直接继承下来使用了,而不需要每个
// 子类重复定义
abstract class Person {
     private String name;
     public void setName(String name) {
         this.name = name;
     }
     public String getName() {
         return name;
     }
     //此方法各个子类都可以使用
     public void commonMethod1() {
         System.out.println("---------commonMethod1-------");
     }
 }

class Employee extends Person {

}
class Student extends Person {

}
抽象的方法只需在抽象类中,提供声明,不需要实现,起到了一个强制的约束作用,要求子类必须实现 
 class AbstractTest02 {
    public static void main(String[] args) {
    Person p = new Employee();
    // Person p = new Student();
    // Person p = new Person();
    p.setName("张三");  p.printInfo();
    }
}
abstract class Person {
    private String name;
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }   //此方法各个子类都可以使用
 public void commonMethod1() {
        System.out.println("---------commonMethod1-------");
    }
    //public void printInfo()
    // {
// System.out.println("------Person.printInfo()--------");  //}
// 采用abstract定义抽象方法
// 如果有一个方法为抽象的,那么此类必须为抽象的
// 如果一个类是抽象的,并不要求具有抽象的方法
public abstract void printInfo();
}
class Employee extends Person {
    //必须实现抽象的方法
  public void printInfo() {
      System.out.println("Employee.printInfo()");
  }
}
class Student extends Person {

    //必须实现抽象的方法
  public void printInfo() {
      System.out.println("Student.printInfo()");
  }
}
如果这个类是抽象的,那么这个类被子类继承,抽象方法必须被覆盖。如果在子类中不覆盖该抽象方法,那么必须将此方法再次声明为抽象方法  抽象类不能被final修饰 抽象类中可以没有抽象方法  接口(行为)

接口我们可以看作是抽象类的一种特殊情况,在接口中只能定义抽象的方法和常量

1) 在java中接口采用interface声明

2) 接口中的方法默认都是public abstract的,不能更改

3) 接口中的变量默认都是public static final类型的,不能更改,所以必须显示的初始化

4) 接口不能被实例化,接口中没有构造函数的概念

5) 接口之间可以继承,但接口之间不能实现

6) 接口中的方法只能通过类来实现,通过implements关键字

7) 如果一个类实现了接口,那么接口中所有的方法必须实现

8) 一类可以实现多个接口 

 接口的进一步应用 

在java中接口其实描述了类需要做的事情,类要遵循接口的定义来做事,使用接口到底有什么本质的好处?可以归纳为两点:

1. 采用接口明确的声明了它所能提供的服务

2.  解决了Java单继承的问题

3. 实现了可接插性(重要) 

 

 以上代码不能灵活的适应需求,当需求发生改变需要改动的代码量太大,这样可能会导致代码的冗余,另外可能会导致项目的失败,为什么会导致这个问题,在开发中没有考虑到程序的扩展性,就是一味的实现,这样做程序是不行的,所以大的项目比较追求程序扩展性,有了扩展性才可以更好的适应需求

第二种方案,使用接口 UML,统一建模语言 

 

 接口和抽象类的区别?

a) 接口描述了方法的特征,不给出实现,一方面解决java的单继承问题,实现了强大的可接插性

b) 抽象类提供了部分实现,抽象类是不能实例化的,抽象类的存在主要是可以把公共的代码移植到抽象类中

c) 面向接口编程,而不要面向具体编程(面向抽象编程,而不要面向具体编程)

d) 优先选择接口(因为继承抽象类后,此类将无法再继承,所以会丧失此类的灵活性) 

 

类之间的关系 1. 泛化关系,类和类之间的继承关系及接口与接口之间的继承关系

 

2. 实现关系,类对接口的实现  

3. 关联关系,类与类之间的连接,一个类可以知道另一个类的属性和方法,在java语言中使用成员变量体现  

4. 聚合关系,是关联关系的一种,是较强的关联关系,是整体和部分的关系,如:汽车和轮胎,它与关联关系不同,关联关系的类处在同一个层次上,而聚合关系的类处在不平等的层次上,一个代表整体,一个代表部分,在java语言中使用实例变量体现 

 5. 合成关系,是关系的一种,比聚合关系强的关联关系,如:人和四肢,整体对象决定部分对象的生命周期,部分对象每一时刻只与一个对象发生合成关系,在java语言中使用实例变量体现  6. 依赖关系,依赖关系是比关联关系弱的关系,在java语言中体现为返回值,参数,局部变量和静态方法调用  

 is-a、is-like-a、has-a 1. Is-a 

 

2.  is-like-a 

3. has-a 

  Object类 

a) Object类是所有Java类的根基类

b) 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类 

toString() 

返回该对象的字符串表示。通常toString 方法会返回一个“以文本方式表示”此对象的字符串,Object 类的 toString 方法返回一个字符串,该字符串由类名加标记@和此对象哈希码的无符号十六进制表示组成,Object类toString源代码如下:

getClass().getName() + '@' + Integer.toHexString(hashCode())

finalize 

垃圾回收器(Garbage Collection),也叫GC,垃圾回收器主要有以下特点:

1. 当对象不再被程序使用时,垃圾回收器将会将其回收

2. 垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源,但是我们可以告诉他,尽快回收资源(System.gc和Runtime.getRuntime().gc())

3. 垃圾回收器在回收某个对象的时候,首先会调用该对象的finalize方法

4. GC主要针对堆内存

5. 单例模式的缺点  

当垃圾收集器将要收集某个垃圾对象时将会调用finalize,建议不要使用此方法,因为此方法的运行时间不确定,如果执行此方法出现错误,程序不会报告,仍然继续运行 

==与equals方法 

等号“==”

等号可以比较基本类型和引用类型,等号比较的是值,特别是比较引用类型,比较的是引用的内存地址 

import 

进行导包

JDK常用开发包

1. java.lang,此包Java语言标准包,使用此包中的内容无需import引入

2.java.sql,提供了JDBC接口类

3. java.util,提供了常用工具类

4. java.io,提供了各种输入输出流 

访问控制权限

java访问级别修饰符主要包括:private protected和public,可以限定其他类对该类、属性和方法的使用权限

注意  以上对类的修饰只有:public和default,内部类除外

 内部类

在一个类的内部定义的类,称为内部类 内部类主要分类:

1. 实例内部类

2. 局部内部类

3. 静态内部类 

实例内部类 

1.创建实例内部类,外部类的实例必须已经创建

2. 实例内部类会持有外部类的引用

3. 实例内部不能定义static成员,只能定义实例成员 

静态内部类 

1. 静态内部类不会持有外部的类的引用,创建时可以不用创建外部类

2. 静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问

局部内部类 

局部内部类是在方法中定义的,它只能在当前方法中使用。和局部变量的作用一样 局部内部类和实例内部类一致,不能包含静态成员 

匿名内部类 

是一种特殊的内部类,该类没有名字 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711851.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号