javaSE_day05 学习笔记 02 —— 面向对象、面向过程、类和对象

javaSE_day05

1. 面向对象和面向过程

1.1 面向过程

eg: 想吃面包 (自己做)
买面 --> 和面 --> 模型 --> 烤熟 --> 吃面包

  • 关注点 --> 过程(步骤)
  • 适合于简单应用

1.2 面向对象

eg: 想吃面包 (让别人做(面包师))
买面 --> 和面 --> 模型 --> 烤熟 --> 吃面包

  • 关注点 --> 对象

以面向过程为基础

  • 适合于大型、复杂的项目

三大特征:继承、封装、多态、(抽象)

1. 封装:

包括: 变量定义private、set / get方法、构造方法

封装的实现:

  • 定义private 私有变量
  • 提供公有的方法 get / set方法
2. 继承:

特点:

  • 什么是继承:由已有类产生新类的一种机制
    • 父类子类:
      • 父类:已有类(被继承类)
      • 子类:新类
  • 继承性:子类可以继承父类的所有成员(构造方法不能继承),有些继承是不能使用的(如private)
  • java只支持单一继承。
  • Object是顶级类,是所有类的父类
  • 满足一种关系:子类 is a 父类 eg: student is a dog //err
  • extends表示继承
super
  • super:表示父类对象
  • super.成员
  • super(实参列表):必须是子类构造方法的第一条有效语句
  • 子类默认调用父类无参构造方法
    eg:构造方法的调用
    在这里插入图片描述
访问修饰符
修饰符修饰访问范围
private变量名、方法本类
默认类、变量、方法同一个包
protected变量、方法同一个包、不同包(继承关系才可以)
public类、变量、方法任何地方

变量使用的范围:方法内 --> 当前类成员变量 --> 父类

方法重写

私有方法不能被重写

继承关系:

  • 父类和子类
    • 方法名相同,参数列表相同
    • 方法的返回类型相同(如果是继承关系,子类的方法返回类型 要 <= 父类)
      子类的方法返回类型 <= 父类
  • 子类方法的访问修饰符 >= 父类的访问修饰符
    子类方法的访问修饰符 要 >= 父类的访问修饰符
  • 子类方法的异常(非运行时异常) <= 父类的异常
  • 为什么要重写? 扩展父类方法的功能
继承关系中构造方法的调用规则
  • 子类创建对象时,总是默认调用父类无参的构造方法。
  • 如果父类没有无参的构造方法,那么子类使用super() 调用父类的构造方法。
    eg:
    super()
3. 多态
  • 定义:一种类型的变量可以指向不同的对象。
    父类声明 子类创建
    eg:
    Animal a1 = new Dog();
    Animal a2 = new Bird();

  • 分类

    • (1)编译时的多态:方法的重载
      eg:
      class A{
      void f(){
      System.out.println(“f”);
      }
      void f(int x){
      System.out.println(“f”+x);
      }
      }

      A a1 = new A();
      A a2 = new A();
      a1.f(); // 输出 f
      a2.f(1); // 输出 f + 1

    • (2)运行时的多态:方法的重写
      eg:
      //父类声明 子类创建
      //在Animal 类中定义eat , Dog和Bird类重写了此方法
      Animal a1 = new Dog();
      Animal a2 = new Bird();
      a1.eat();
      a2.eat();

      • 编译时,看变量的声明类型
      • 运行时,如果子类重写了父类的方法,动态绑定方法到子类上,运行子类的方法。但不会动态绑定其他。
        动态绑定
        练习:
        在这里插入图片描述
  • 多态的应用
    方法的参数定义为父类类型或者接口类型
    eg:
    public void feed(Animal animal){
    animal.eat();
    }

2. 类和对象

  • :对具有共同属性和行为特征的一类事物的抽象。(属性对应变量(静态);行为对应方法(动态))

  • 对象:通过类创建的实例。
    类是创建对象的模板 先有类再有对象

    创建对象就是调用构造方法
    eg: 创建类、对象的创建、用对象使用类成员
    在这里插入图片描述
    在这里插入图片描述

2.1 类的定义

class 类名{
类成员的定义:成员变量方法({ })
}

  • 类名首字母要大写
  • 类分为工具类,测试类(程序入口类)

2.2 构造方法(构造器)

  • 定义:方法名和类名相同,无返回类型。

    可以有多个构造方法(只和参数的数据类型有关),多个构造方法一定是重载的。

  • 来源:2个途径。

    • (1)系统默认。没有参数,一定是public修饰的
    • (2)自定义。不再有默认的构造方法。
  • 作用:和new一起完成创建对象。

  • 使用(调用):new 构造方法;
    eg:

package cn.tedu.demo;
/**
 * 调用构造方法
 * 构造方法的重载
 * @author Dell
 *
 */
public class Demo2 {

	public void Demo2() { //有void,不是构造方法,在测试类中用demo2.Demo2()调用
		System.out.println("Demo2");
	}
	
	//构造方法的重载
	public  Demo2() { // 是构造方法   用Demo2 demo2 = new Demo2();调用    
		System.out.println("Demo2");
	}
	public Demo2(int x) {  //参数的数据类型不同,是构造方法的重载
		System.out.println(x);
	}
	public Demo2(String str) { //参数的数据类型不同,是构造方法的重载
		System.out.println(str);
	}
}

构造方法不能继承,其他方法都可以被继承,只是private方法不能使用。

2.3 对象的初始化过程(内存)

创建对象时,成员变量会被初始化

2.4 构造块 { }

  • 在构造方法之前执行,初始化成员变量
  • 构造块内可以定义和成员变量相同名称的变量

2.5 局部块

public void test() {
// 局部块 :执行完毕,立即回收,可以提高内存的利用率
{
int x = 9;
System.out.println(“x = 9”);
}
System.out.println(“test”);
}

2.6 变量的分类

定义的位置访问范围默认值
成员变量定义到类体中整个类内有默认值
局部变量定义到方法内或参数列表当前方法无默认值
  • void f(int x){
    int y;
    …(x);
    }

2.7 this关键字

成员变量和局部变量 重名 时,用this关键字。

  • this表示本类对象
  • 访问类成员:this. 成员 (成员变量)
  • 调用本类的构造方法:this(实参);
    this()必须是构造方法的第一条有效语句。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值