1.面向对象概述

1.1.类与对象的关系

有对象吗,没有的话我给你new一个!

对象顾名思义就是一个个的个体,当所有的个体,例如人的总称为人类,这一类的生物或者物品。人类是对人这种个体的抽象化,不会说你是个人类,而是说你是个人,所以人就是人类的具体实现。

简而言之,类是对象的抽象化,对象是类的具体实现。

正所谓Java主打的万物皆对象。

public class Person{
private String name;
private int age;
private String gender; public Person(String name, int age, String gender){
this.name = name;
this.age = age;
this.gender = gender;
} public void say(){
System.out.println("hello");
} public static void main(String[] args){
Person p = new Person("张三", "22", "男");
p.say();
}
}

在上面代码中,类Person就是人的一种抽象化,每个人都有姓名、年龄、性别等属性和一些动作,比如说等。在main方法中我们使用关键字new将类具体化为一个对象,这个对象名张三、22岁、男性,并且说了hello。

1.2.类的具体描述

类Person中有属性name、age、gender等,方法say等。还有个比较特殊的方法public Person(...),这个方法就是类的构造器。

构造方法又成为构造器,和一般的方法不同的是:

  • 没有返回值(没有返回类型,也没有void)
  • 方法名和类名一样

一个类可以有多个构造方法,这是后面要说到的重载。

2.面向对象的三大特性

面向对象程序设计的优点:

  • 可扩展
  • 可重用

缺点:

  • 复杂程度较高

2.1.继承

继承就是子类继承父类的特征和行为,得到父类的实例变量和方法。例如猫和狗都是动物,可以继承动物的一些通用特征和行为。

为什么需要继承?

如果没有继承,当我们写猫和狗的类时:

public class Cat {
private String name;
private int age;
public Cat(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}

发现我们写了很多重用的代码,比如属性name、age和方法eat、sleep等。

如果使用继承代码将变成怎么样呢?

public class Animal {
private String name;
private int age;
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public void eat() {
System.out.println(name+"吃东西");
}
public void sleep() {
System.out.println(name+"睡觉");
}
}
public class Cat extends Animal {
public Cat(String name, int age) {
super(name, age);
}
}
public class Dog extends Animal {
public Dog(String name, int age) {
super(name, age);
}
}

我们发现只需要写一个父类,子类就具有父类的属性和方法了,这样我们就不需要写那么多重复的代码了,提高了代码的复用性。

总结以下:

  • 子类拥有父类的非private的属性、方法,这里private之前说过,所修饰的只能在同一个类中可见
  • 子类可以对父类进行扩展
  • 子类可以重写父类的方法
  • Java中不支持多继承

重写和重载:

  • 重写(override):猫和鱼都继承了动物类,如果动物类有一个方法叫run(),对于猫来说使用四肢奔跑,对于鱼来说使用鱼鳍游动。这时我们需要重写父类的方法:
public class Person {
public void run() {
System.out.println("动物跑起来了");
}
} public class Cat {
@Override
public void run() {
System.out.println("猫跑起来了");
}
} public class Fish {
@Override
public void run() {
System.out.println("鱼游起来了");
}
}
  • 重载(overload):同一个类中,方法名相同,参数不同,返回值可以相同或不同。
public class Animal {
public void test() {}
public void test(int num) {}
public void test(String str) {}
public void test(int num, String str) {}
public void test(String str, int num) {}
}

2.2.多态

多态就是同一个行为具有不同的表现形式。

多态分类:

  • 编译时多态:静态的,主要是方法的重载
  • 运行时多态:动态绑定实现的,例如父类的引用指向子类的对象

实现多态的必要条件:

  • 继承
  • 重写
  • 向上转型:父类的引用指向子类的对象

多态的优点:

  • 消除耦合关系
  • 可扩展性
  • 简单易用

多态的实现方式:

  • 重写
  • 接口:可多实现接口,解决单继承的缺陷
public interface Animal {
public void run();
} public class Cat implements Animal {
@Override
public void run() {
System.out.println("猫趴");
}
}
  • 抽象类和抽象方法:抽象类中可以存在非抽象方法,抽象方法一定存在于抽象类中,抽象方法只声明不实现,继承的子类必须实现抽象类中的抽象方法
public abstract Animal {
public abstract void run();
} public class Cat extends Animal {
@Override
public void run() {
System.out.println("猫趴");
}
}

2.3.封装

封装将类的实现细节隐藏,以保证程序和数据不受外部干扰,保护信息。

优点:

  • 保护类中的东西,隐藏信息,实现细节
  • 良好的封装可以减少耦合
  • 类内部结构可以自由修改
  • 可以精确控制类成员
public class Person {
private String name;
private int age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}

将类的属性设置为private,然后对外提供public方法进行赋值和取值。

Java基础学习之面向对象(4)的更多相关文章

  1. java基础学习05(面向对象基础01)

    面向对象基础01 1.理解面向对象的概念 2.掌握类与对象的概念3.掌握类的封装性4.掌握类构造方法的使用 实现的目标 1.类与对象的关系.定义.使用 2.对象的创建格式,可以创建多个对象3.对象的内 ...

  2. Java基础学习(三)—面向对象(上)

    一.理解面向对象       面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...

  3. java基础学习总结——面向对象1

    目录 一.面向过程的思想和面向对象的思想 二.简单理解面向对象 三.面向对象的设计思想 四.对象和类的概念 五.如何抽象出一个类? 六.类(对象)之间的关系 七.Java与面向对象 八.为什么使用面向 ...

  4. java基础学习总结——面向对象2

    一.JAVA类的定义

  5. java基础学习05(面向对象基础02)

    面向对象基础02 实现的目标 1.String类的使用2.掌握this关键字的使用3.掌握static关键字的使用4.了解内部类 String类 实例化String对象一个字符串就是一个String类 ...

  6. java基础学习05(面向对象基础01--类实例分析)

    面向对象基础01(类实例分析) 实现的目标 1.如何分析一个类(类的基本分析思路) 分析的思路 1.根据要求写出类所包含的属性2.所有的属性都必须进行封装(private)3.封装之后的属性通过set ...

  7. 转载-java基础学习汇总

    共2页: 1 2 下一页  Java制作证书的工具keytool用法总结 孤傲苍狼 2014-06-24 11:03 阅读:25751 评论:3     Java基础学习总结——Java对象的序列化和 ...

  8. Java基础学习笔记总结

    Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...

  9. Java基础教程:面向对象编程[1]

    Java基础教程:面向对象编程 内容大纲 Java语言概述 Java语言特点 1.Java为纯面向对象的语言,它能够直接反映现实生活中的对象.总之,Everything is object! 2.平台 ...

随机推荐

  1. pipe()管道通信

    管道 管道的概念: 管道是一种最基本的IPC机制,作用于有血缘关系的进程之间,完成数据传递.调用pipe系统函数即可创建一个管道.有如下特质: 1. 其本质是一个伪文件(实为内核缓冲区) 2. 由两个 ...

  2. 玩转 Comparator 和 Comparable 两接口

    最近项目中有排序的需求,就查看了一下Java文档,发现有两个接口都可以进行排序,Comparable 和 Comparator 两接口到底有啥区别?何时用?怎么用?使用场景我都在底下一一研究分享出来: ...

  3. python3处理csv文件

    1. 基础语句 1.1 文件的读取 如果需要读取一行数据如下表1所示,那么需要读取域名下面的数据,便使用如下代码: with open('A.csv','rb') as csvfile: reader ...

  4. pdfFactory如何设置限制打印和浏览文档权限

    当我们进行私密文件的分享时,除了要设置密码保护文件内容外,还要注意设置打印限制,防止他人利用打印的方式,进行纸质文件的传播. 在使用pdfFactory安全策略时,我们可以通过设定禁止打印的方式,完全 ...

  5. 详解FL Studio压缩器——Fruity Limiter(上)

    压缩,是电音制作中重要一步,将声音信号压缩后可过滤噪音并使音质变好.众所周知,音乐编曲软件FL Studio的特色就是电音制作,所以必不可少要用到压缩器,今天我们就用FL Studio20来讲解一下. ...

  6. 对于this和当前线程的一些理解

    在学习这个InheritableThreadLocal类的时候,我对于有个地方一直没有理解,我发现了盲点. 1 private void init(ThreadGroup g, Runnable ta ...

  7. python+selenium下载和上传文件

    操作浏览器上传文件,先看代码 1 """ 2 * send_keys() 指定文件上传路径. 3 """ 4 from selenium i ...

  8. Windows/Linux 代码共享,开发者称此举使Linux有了更差的结局

    英特尔近期披露了 Linux 图形驱动程序相关的一些细节并指出,英特尔的图形驱动程序现在已在 Windows/Linux 之间共享约 60% 的代码库,90~100% 的性能. 针对此事,红帽公司的高 ...

  9. 三:robot framework常用关键字

    该部分介绍的是内置库:Builtin,估不需要导入,即可使用 1.RF中定义一个变量: ${XXX}   XXX表示:变量名 *** Settings *** *** Test Cases *** 定 ...

  10. Kubernetes日志系统新贵Loki-Stack

    Loki简介 Grafana Loki是可以组成功能齐全的日志记录堆栈的一组组件. 与其他日志记录系统不同,Loki是基于仅索引有关日志的元数据的想法而构建的:标签(就像Prometheus标签一样) ...