有关面向对象的问题都可以来这里

java面向对象详解

面向对象,好多的初学者感到这个知识点特别的不容易理解,今天我们来聊聊面向对象的具体思想,以及构成的面向对象的三大主要内容,封装继承多态,是为什么要来使用的。
来我们先来谈谈,在面向对象之前,面向过程是怎么样的。

面向过程:
“面向过程”(Procedure Oriented)是一种以过程为中心的编程思想。这些都是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。
在这里插入图片描述
就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

来,我们再来看看面向对象
面向对象(Object Oriented)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
简单来说就是不用过度关系方法的具体实现,而是来注重方法是否可以调用。

看官再接着来看:

封装

封装,将代码和数据捆绑在一起,隐藏类的属性,暴露出一个方法提供给外界访问

package com.gsy.demo.entity;

public class User {
    private String name;
    private String sex;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "BeansDemo{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", age=" + age +
                '}';
    }
}

继承

继承,子类继承父类,也可以 派生类,超类,使用的关键字是 extends
格式:
public class 子类 extends 父类{
}
子类继承了父类后:子类在堆区的空间指向了父类,可以根据权限来使用父类的属性和方法。
加载过程:

package com.gsy.demo.entity;

	public class User extends People{
	    String name;
	    String sex;
	    int age;
	  	static {
			System.out.println(name);
		}
	public User(String name, String sex, int age) {
	        // 这里会默认写一个super(),是为了加载这个类的时候,先去加载父类的时候先初始化父类。
	        this.name = name;
	        this.sex = sex;
	        this.age = age;
	    }
}
class People{
	String colour;
	static {
			System.out.println(colour);
	}
	// 初始化父类,导致父类被加载,又导入静态代码块被执行。
}

程序首先加载类,然后再对类进行初始化。
加载类的顺序为:先加载父类,父类加载完毕后再加载子类。
初始化的顺序为:先初始化父类,父类初始化完毕后再初始化子类。

最后得出类加载顺序为:先按照声明顺序初始化基类静态变量和静态代码块,接着按照声明顺序初始化子类静态变量和静态代码块,而后按照声明顺序初始化基类普通变量和普通代码块,然后执行父类构造函数,接着按照声明顺序初始化子类普通变量和普通代码块,最后执行子类构造函数。

多态

首先,多态从字面上的意思是指,一种事物的多种状态。然后多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):

package com.gsy.demo.test;

	public class Test {
	    public static void main(String[] args) {
	      show(new Cat());  // 以 Cat 对象调用 show 方法
	      show(new Dog());  // 以 Dog 对象调用 show 方法
	                
	      Animal a = new Cat();  // 向上转型  
	      a.eat();               // 调用的是 Cat 的 eat
	      Cat c = (Cat)a;        // 向下转型  
	      c.work();        // 调用的是 Cat 的 work
	  }  
	            
    public static void show(Animal a)  {
      a.eat();  
        // 类型判断
        if (a instanceof Cat)  {  // 猫做的事情 
            Cat c = (Cat)a;  
            c.work();  
        } else if (a instanceof Dog) { // 狗做的事情 
            Dog c = (Dog)a;  
            c.work();  
        }  
    }  
}
 
abstract class Animal {  
    abstract void eat();  
}  
  
class Cat extends Animal {  
    public void eat() {  
        System.out.println("吃鱼");  
    }  
    public void work() {  
        System.out.println("抓老鼠");  
    }  
}  
  
class Dog extends Animal {  
    public void eat() {  
        System.out.println("吃骨头");  
    }  
    public void work() {  
        System.out.println("看家");  
    }  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值