Java基础学习第四章

面向对象程序设计

前言

今天我为大家简单的介绍下面向对象程序设计,若是有些地方不能理解,那就得花下功夫了,因为面向对象程序设计是我们 java 语言中的重点内容,不能有一点含糊,不过也不可能一开始就深究其原理,我们这次只是为大家介绍个大概,今后还会详细讲解其中的知识点。

面向对象的程序设计语言通常都包含三大特征
1. 封装
2. 继承
3. 多态

封装

信息隐藏
信息隐藏是对象的一种保护机制,使得它的属性或方法不被外部的程序直接访问;外界对类内部定义的数据(对象的成员变量)直接操作会导致数据的错误、混乱或安全性问题。

例:

public class Customer {

	private int id;
	private int vipLevel = 3;
    
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public int getVipLevel() {
		return vipLevel;
	}
	public void setVipLevel(int vipLevel) {
		this.vipLevel = vipLevel;
	}
}

类的封装表现形式通常为:将类中的属性通过private私有化,然后提供public方法以此对外提供访问接口(例如set,get方法)

在本例中, id 和 vipLevel 属性就被封装起来,外部无法直接访问操作该属性,只能通过 set 和 get 方法来进行操作。

继承

java中通过继承,可以提高类的可扩展性,以及代码的可复用性;继承是一种 is a 的关系

语法

[修饰符] class 子类名 extends 父类名称{

//属性、方法的声明

}

例:
父类

public class Father {

	public String firstName;
	private double money;
	
	public void run() {
		System.out.println("奔跑");
	}
	public double getMoney() {
		return money;
	}
	public void setMoney(double money) {
		this.money = money;
	}

子类

public class Son extends Father{
    
}

本例中,子类 Son 继承了 父类 Father ,获得了父类中任何非私有的属性和方法,例如 FirstName 属性 和 run()方法,但子类无法继承私有属性 money ,在这里 money 被封装起来了,只有 Father 类才能直接调用,不过子类可以通过 getMoney()方法获得 money 的值 和 setMoney(double money) 方法修改 money 的值。

关于继承注意事项

  1. java中一个父类可以存在多个子类
  2. java中一个子类只能有一个父类
  3. Java中虽然不能多继承,但是可以使用多重继承到达多继承目的
  4. 子类继承父类之后,子类中可以使用父类的非私有元素(属性,方法) ``````代码可复用性
  5. 子类除了可以直接使用父类中的非私有元素外,还可以扩展自己的信息``````代码可扩展性
  6. 在创建子类对象时,通常是先调用父类构造器(不是创建父类对象)完成初始化操作,再执行子类构造器完成子类对象的创建以及初始化(调用默认构造器)
  7. 如果父类中不存在默认构造器,则子类中需要通过super显式的调用父类的其他构造器
  8. 构造器不能被继承,只能被子类调用(初始化子类时)

多态

方法重写( Override)

子类继承父类后,对父类中的某些方法覆盖,重新实现;在创建子类对象后再调用该方法时,此时使用的就是被重写之后的方法,而不是父类的方法

public class Animal{
    public void eat(){
        System.out.pritnln("吃食物");
    }
}

public class Dog extends Animal{
    
    /**方法重写*/
    @Override
    public void eat(){
        System.out.println("吃骨头");
    }
}

注意事项:

  1. 方法的重写发生在继承关系的子类中,一般为子类重写父类的方法
  2. 被重写的方法名称必须跟父类方法名保持一致
  3. 被重写的方法中参数的个数,顺序,类型必须跟父类方法一致,否则,该操作称之为重载而非重写
  4. 被重写的方法返回值必须跟父类方法一致
  5. 子类中重写的方法访问权限不能小于父类

方法重载(Overload)

方法的重载是面向对象程序多态的一种实现策略,表现是在同一个类中的多个同名方法的不同体现形式。

public class PrintDemo {

	public void write(int i){
		System.out.println(i);
	}
	
	public void write(float f){
		System.out.println(f);
	}
	
	public void write(String s){
		System.out.println(s);
	}
	
	public static void main(String[] args) {
		PrintDemo pd = new PrintDemo();
		pd.write(3.14F); 
		pd.write("hello");
		pd.write(10);
	}
}

注意事项

  1. 方法的重载一般发生在同一个类或者存在继承关系的多个类中
  2. 重载必须要保证被重载方法参数类型,个数,顺序至少有一项不一致(当然也不能全部不一致)
  3. 方法的重载跟返回值无关

方法的重写和重载都是多态一种实现策略

多态是面向对象三大特征中最重要的一种特征,多态可以体现方法层面,方法层面的多态由重载和重写实现;另外多态最重要的体现在变量层面,可以使用一个父类的引用变量指向任何的子类对象,从而实现引用动态绑定机制。

例:

public class Animal{
    String name;
    public Animal(String name){
        this.name = name;
    }
    
    public void eat(){
        System.out.println(name+"吃东西");
    }
}
public class Dog extends Animal{
    public Dog(String name){
        super(name);
    }
}
public class Test{
    public static void main(String[] args){
        //父类引用指向子类对象(向上转型)
        Animal a = new Dog();
        //下转型
        Dog d = (Dog)a;
    }
}

使用多态可以提高程序的可扩展性,多态也称之为动态绑定
使用父类引用指向子类对象,引用则只能调用子类继承了父类的属性和方法,不能调用子类自定义的属性和方法。
可以使用父类引用指向子类对象,但是如果使用子类引用指向父类对象时,操作不当将会导致类型转换异常
java.lang.ClassCastException

结语

今天只是为大家粗略的介绍了下面向对象,里面还有许多需要深究的问题。我在这里没有提出,希望大家在下面能多练,向上转型和向下转型有机会我会带大家拓展一下,现阶段大家只需要将我所列出的知识点与语法牢记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值