面向对象编程

何为面向对象?

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

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

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

面向对象有哪些特点?

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

讲解一下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).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值