面向对象编程

16 篇文章 0 订阅
何为面向对象?

首先,对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件,可以说万事万物皆对象。

其次,具有相同特性(数据元素)和行为(功能)的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型(可以理解为高配结构体),它里面会有描述该类的属性和方法

所谓的面向对象:就是创建一些类的实例(即对象),通过对象来进行一系列方法的调用。

面向对象有哪些特点?

在所有面向对象语言中,都有三点特性:封装,多态,继承;

讲解一下Java的面向对象的特点

1.,是组织类的一种方式. 使用包的主要目的是保证类的唯一性,我们一般使用import来导入包;

import java.util.Date;//引入util包中的Date类 
import java.util.*; //引入util包所有类,不建议这样写,有可能遇到重复类
其次还有一种方式;
 java.util.Date date = new java.util.Date();
 每次写的时候,注明是哪个包也行,只不过太麻烦了

当然我们也可以自己创建一些包,而且牵扯一个包访问控制权限的问题,我们在下文中会讲到。

2.继承,通俗来讲就是子承父业,包括老子的一切。用Java的语言来说,就是一个A类继承另一个B类,那么A类我们称之为 父类 , 基类超类,B类称之为 子类, 派生类。 B类会继承A类的所有字段和方法。关键字为extends;

class 子类 extends 父类 {

} 

注意:

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

class Animal {     
        public String name; 
       public Animal(String name) {
            this.name = name;     
   } 
 
       public void eat(String food) {
            System.out.println(this.name + "正在吃" + food);     }
} 
 
class Cat extends Animal {     
       public Cat(String name) {         // 使用 super 调用父类的构造方法.          
                  super(name);     
       } 
} 

Java的四种控制访问权限:
1.private: 类内部能访问, 类外部不能访问。
2.默认(也叫包访问权限): 类内部能访问, 同一个包中的类可以访问, 其他类不能访问。
3.protected: 类内部能访问, 子类和同一个包中的类可以访问, 其他类不能访问。
4.public : 类内部和类的调用者都能访问。
在这里插入图片描述 default表示没有写关键字。

关于继承,当一个类不像想被其他类所继承的时候,我们可以用final来修饰这个类,表示最终类,也可以用这个关键字来声明常量。

3.组合,和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果.

public class Student {     ... } 
 
public class Teacher {     ... } 
 
public class School {     
        public Student[] students;     
        public Teacher[] teachers; 
} 

它没有特殊字,仅仅是将一个类的实例作为另外一个类的字段. 我们可以理解成一个学校中 “包含” 若干学生和教师

4.多态,具体有三种,向上转型,动态绑定,方法重写。
(1)向上转型:

Bird bird = new Bird("圆圆"); 
Animal bird2 = bird; 
 
// 或者写成下面的方式 
Animal bird2 = new Bird("圆圆");

此时 bird2 是一个父类 (Animal) 的引用, 指向一个子类 (Bird) 的实例. 这种写法称为 向上转型(因为UML图中,父类在子类上面).

(2)动态绑定:
当子类和父类中出现同名方法的时候, 再去调用会出现什么情况呢?(这里不提供例子了,有兴趣的可以自己下去实验),结论: 在 Java 中, 调用某个类的方法, 究竟执行了哪段代码 (是父类方法的代码还是子类方法的代码) , 要看究竟这个引 用指向的是父类对象还是子类对象. 这个过程是程序运行时决定的(而不是编译期), 因此称为 动态绑定.

(3)方法重写:
子类实现父类的同名方法, 并且参数的类型和个数完全相同, 这种情况称为 覆写/重写/覆盖(Override).
要注意的是:
a.重写和重载是两个完全不同的概念,重载要求的是,函数名称一致,但函数参数的个数和类型不同,与返回值无关,而重写要求参数的类型和个数是完全一致的,而且是在父类和子类之间。
b.普通方法可以重写,static修饰的方法不能重写。
c.重写中子类的方法的访问权限不能低于父类的方法访问权限.

多态的作用:

  1. 类调用者对类的使用成本进一步降低
  2. 降低圈复杂度
  3. 可扩展能力变强

5.抽象类,这种没有实际工作的方法, 我们可以把它设计成一个 抽象方法(abstract method),其最大意义就是被继承,包含抽象方法的类我们称为 抽象类(abstract class)
注意:
a.抽象类不能被具体化。
b.抽象方法不能是private的。
c.抽象类中可以包含其他的非抽象方法, 也可以包含字段. 这个非抽象方法和普通方法的规则都是一样的, 可以被重写, 也可以被子类直接调用

6.接口,接口是抽象类的更进一步. 抽象类中还可以包含非抽象方法, 和字段. 而接口中包含的方法都是抽象方法, 字段只能包含 静态常量.

关键字:
interface
implements

a.使用 interface 定义一个接口
b.接口中的方法一定是抽象方法, 因此可以省略 abstract
c.接口中的方法一定是 public, 因此可以省略 public
d.使用 implements 继承接口. 此时表达的含义不再是 “扩展”, 而是 “实现” 在调用的时候同样可以创建一个接口的引用, 对应到一个子类的实例.
e.接口不能单独被实例化
f.接口中只能包含抽象方法. 对于字段来说, 接口中只能包含静态常量(final static).

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值