面向对象编程

目录

一、包

1.1 导入包中的类

 1.2 将类放到包中

 1.3 包的访问权限控制

1.4 常见的系统包 

二、继承 

2.1 基本语法

2.2 规则

 2.3 protected 关键字

 2.4 多层继承

 2.5 final关键字

三、组合

四、多态

4.1 向上转型

4.1.1 向上转型发生的时机

4.2 向下转型

4.3 方法重写

4.3.1 规则

4.3.2 注意:

4.3.3 重载和重写的区别 

4.4 super关键字

4.4.1super 和 this 的区别

 五、抽象类

5.1 语法规则

5.2 抽象类的作用

六、接口

6.1 语法规则

6.2 接口间的继承(扩展)

6.3 抽象类和接口的区别


一、包

(package) 是组织类的一种方式,使用包的主要目的是保证类的唯一性。

1.1 导入包中的类

  • 使用import 语句导入某个包

         例如:import java.util.Date

  • 如果需要使用 java.util 中的其他类,可以用import java.util.*

 1.2 将类放到包中

规则

  • 在文件的最上方加上一个 package 语句指定该代码在哪个包中
  • 如果一个类没有 package 语句, 则该类被放到一个默认包中
  • 包名需要指定成唯一的名字,  通常会用公司的域名的颠倒形式 ( 例如 com.bit.demo1 )
  • 包名要和代码路径相匹配例如创建 com.bit.demo1 的包,那么会存在一个对应的路径 com/bit/demo1 来存储代码

 1.3 包的访问权限控制

如果某个成员不包含 public private 关键字 此时这个成员可以在包内部的其他类使用, 但是不能在包外部的类使用

1.4 常见的系统包 

1. java.lang: 系统常用基础类 (String、 Object), 此包从 JDK1.1 后自动导入。
2. java.lang.reflflect:java 反射编程包;
3. java.net: 进行网络编程开发包。
4. java.sql: 进行数据库开发的支持包。
5. java.util: java 提供的工具程序包。 ( 集合类等 ) 非常重要
6. java.io:I/O 编程开发包

二、继承 

继承表示 is - a 的关系

2.1 基本语法

class 子类 extends 父类 {
}

2.2 规则

  • 使用 extends 指定父类
  • Java 中一个子类只能继承一个父类 (C++/Python等语言支持多继承)
  • 子类会继承父类的所有 public 的字段和方法
  • 对于父类的 private 的字段和方法,子类中是无法访问的
  • 子类的实例中, 也包含着父类的实例。 可以使用 super 关键字得到父类实例的引用

 2.3 protected 关键字

对于类的调用者来说, protected 修饰的字段和方法是不能访问的 ,对于类的子类 同一个包的其他类 来说, protected 修饰的字段和方法是可以访问的。
注: Java 中对于字段和方法共有四种访问权限:
  • private: 类内部能访问,类外部不能访问
  • 默认(也叫包访问权限):类内部能访问,同一个包中的类可以访问, 其他类不能访问
  • protected:类内部能访问,子类和同一个包中的类可以访问, 其他类不能访问
  • public:类内部和类的调用者都能访问
范围privatedefalutprotectedpublic
同一包中的同一类可以访问可以访问可以访问可以访问
同一包中的不同类可以访问可以访问可以访问
不同包中的子类可以访问可以访问
不同包中的非子类可以访问

 2.4 多层继承

代码示例:

public A {

}
public B extends A {

}
public C extends B {

}

 2.5 final关键字

修饰类表示被修饰的类不能被继承

三、组合

组合表示has - a的关系
组合是将一个类的实例作为另外一个类的字段
代码示例:
public class Student { 
  
} 
public class Teacher { 
  
} 
public class School { 
 public Student[] students; 
 public Teacher[] teachers; 
}

四、多态

4.1 向上转型

把子类对象或引用给父类

代码示例:

Dog dog = new Dog("小狗",3);
Animal animal = dog;
Animal animal = new Dog("小狗",3);

 向上转型之后,只能通过父类的引用来访问父类自己特有的属性和方法,不能访问子类特有的属性和方法。

4.1.1 向上转型发生的时机

  • 直接赋值
  • 方法传参
  • 方法返回

4.2 向下转型

把父类引用给子类

代码示例:

Animal animal = new Brid("小鸟",3);
Bird bird = (Bird) animal;

4.3 方法重写

4.3.1 规则

  • 函数名相同
  • 函数参数列表相同
  • 函数返回值相同

4.3.2 注意:

  • 静态方法不能重写
  • private方法不能重写
  • 子类的访问权限要大于父类
  • 若一个方法被final修饰就不能重写 

4.3.3 重载和重写的区别 

区别重载重写
概念方法名称相同,参数的类型及个数不同方法名称、返回值类型、参数的类型及个数完全相同
范围一个类继承关系
限制没有要求被重写的方法不能比父类的访问控制权限更严格

4.4 super关键字

用于子类内部调用父类方法

  • 访问父类成员变量
  • 访问父类成员方法
  • 访问父类构造方法 

4.4.1super 和 this 的区别

区别thissuper
概念访问本类中的属性和方法由子类访问父类中的属性和方法
查找范围先查找本类,本类没有就调用父类不查找本类,直接调用父类
特殊表示当前对象

 五、抽象类

没有实际工作的方法,可以将它设计成一个抽象方法,包含抽象方法的类称为抽象类。

5.1 语法规则

代码示例:

class abstract Shape {
     abstract public void draw();
}

注:

  • 抽象类不能直接实例化
  • 抽象类中可以有和普通类一样的成员
  • 一个普通类如果继承了抽象类,这个类需要重写抽象类中的抽象方法
  • 一个抽象类A继承了另一个抽象类B之后,可以不重写B中的方法,但是一旦A被继承后,一定要重写所有的抽象方法
  • 抽象方法不能是private 和 final修饰的

5.2 抽象类的作用

抽象类存在的最大意义就是为了被继承。
抽象类本身不能被实例化, 要想使用,   只能创建该抽象类的子类,   然后让子类重写抽象类中的抽象方法。

六、接口

6.1 语法规则

interface IShape {
}
  • 使用 interface 定义一个接口
  • 接口中的方法默认都是public abstract
  • 接口中的成员变量默认都是public static final
  • 接口不能实例化
  • 一个类使用 implements 关键字实现接口 
  • 一个普通类可以既继承类也实现接口(多个),一个抽象类可以实现一个接口
  • 接口中可以有静态方法

6.2 接口间的继承(扩展)

代码示例:

interface TT1 {
    void funcTT1();
}
interface TT2 extends TT1{
    void funcTT2();
}
interface TT3 extends TT2{
    void funcTT3();
}
class TTClass implements TT3{
    需重写TT1-TT3中所有的方法
}

6.3 抽象类和接口的区别

区别抽象类接口
结构组成普通类 + 抽象方法抽象方法 + 全局变量
权限各种权限public
子类使用使用extends继承抽象类使用implements实现接口
关系一个抽象类可以实现若干个接口接口不能继承抽象类,但是接口可以使用extends继承多个父接口
子类限制一个子类只能继承一个抽象类一个子类可以实现多个接口

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值