zoukankan      html  css  js  c++  java
  • Java 面向对象

    面向过程(Procedure Oriented)

    面向过程是一种以过程为中心的编程思想。是以什么正在发生为主要目标进行编程,不同于面向对象的是谁在受影响。与面向对象明显的不同就是封装、继承、类。

    就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

    面向过程其实是最为实际的一种思考方式,就算是面向对象的方法也是含有面向过程的思想。可以说面向过程是一种基础的方法。它考虑的是实际地实现。一般的面向过程是从上往下步步求精,所以面向过程最重要的是模块化的思想方法。对比面向过程,面向对象的方法主要是把事物给对象化,对象包括属性与行为。当程序规模不是很大时,面向过程的方法还会体现出一种优势。因为程序的流程很清楚,按着模块与函数的方法可以很好的组织。

    面向对象(Object Oriented)

    面向对象是一种以事物为中心的编程思想。是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

    面向对象是以功能来划分问题,而不是步骤。面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节。

    面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

    通俗的来说:

    面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

    面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

    面向对象三大特性

    1、封装

    将对象的实现细节隐藏起来,仅对外提供公共访问方式。将变化隔离,便于使用,提高复用性和安全性。

    2、继承

    当子类继承父类后,子类是一种特殊的父类,能够直接或间接获得父类里的成员。提高代码复用性;继承是多态的前提。

    3、多态

    父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。这意味着同一类型的对象在运行时可能表现出不同的行为特征。提高了程序的拓展性。

    名词说明

    对象(object):包含特性和行为的一个实体,对象也称为实例(instance)

    类(class):具有相同特性和行为的多个对象的抽象

    类的实例化:把类具体到某一个对象上面,该对象有具体的什么状态特征和什么行为。

    类的定义

    对象的一些状态特征使用成员变量表示

    对象的行为使用方法表示

    class 类名 {
    	0~N个成员变量(字段Field);
    	0~N个方法
    }
    

    注意:

    1. 若类使用 public 修饰,则类名必须和当前所在的文件名相同
    2. 类型必须符合标识符的命名规范(使用名词,首字母大写)

    例子:人类

    class Person {
    	// 描述状态特征:成员变量
    	String name;	 // 姓名
    	int age;		 // 年龄
    	int height;		 // 身高
    	
    	// 描述行为:方法
    	void sing(){
    		// 唱歌
    	}
    	
    	void dance(){
    		// 跳舞
    	}
    }
    

    对象的创建

    在程序中,必须先有类,再有对象(先得有模板,再有根据模板制造出来的个体)

    创建对象

    类 对象名 = new 类名();
    

    赋值

    对象名.变量名 = 值;
    

    取值

    变量 = 对象名.变量名
    

    对象调用方法

    对象名.方法名([实参])
    

    匿名对象

    创建一个对象,没有把它赋值给任何一个变量。只能使用一次。

    构造器

    构造器:在对象创建时,自动调用的方法,我们称它是构造器或者构造方法。

    一个类至少存在一个构造器。创建对象其实就是在调用构造器。

    构造器的作用

    1、创建对象,必须和 new 一起使用。
    2、完成对象的初始化操作。

    构造器的特点

    1、构造器的名称是和当前类名一致的。
    2、禁止有返回值类型,不能使用void作为返回值。
    3、在构造器当中不能使用return。

    其实构造器是有返回值的,它返回的是当前创建对象的引用。

    默认构造器

    在类中找不到默认的无参构造器,但是通过反编译工具可以看到。

    java 源文件:

    public class User {
    	String name;
    	int age;
    
    	public void showMe() {
    		System.out.println("我是" + name);
    	}
    }
    

    通过反编译后:

    import java.io.PrintStream;
    
    public class User
    {
    
    	String name;
    	int age;
    
    	public User()
    	{
    	}
    
    	public void showMe()
    	{
    		System.out.println((new StringBuilder("我是")).append(name).toString());
    	}
    }
    

    编译器编译源文件时,会创建一个默认的构造器,如果成员变量设置了默认值,默认值也是在默认构造器当中设置的。

    java 源文件:

    public class User {
    	String name = "smile";
    	int age = 20;
    
    	public void showMe() {
    		System.out.println("我是" + name);
    	}
    }
    

    通过反编译后:

    import java.io.PrintStream;
    
    public class User
    {
    
    	String name;
    	int age;
    
    	public User()
    	{
    		name = "smile";
    		age = 20;
    	}
    
    	public void showMe()
    	{
    		System.out.println((new StringBuilder("我是")).append(name).toString());
    	}
    }
    

    默认构造器的特点

    1、符合构造器的特点
    2、没有参数
    3、如果类使用了public修饰,它创建的默认构造器也会加public。

    自定义构造器

    自己定义了构造器,编译器就不会帮你再生成默认的构造器了。

    public class User {
    	String name;
    	int age;
    	
    	public User() {
    		name = "smile";
    		age = 18;
    	}
    	
    	public User(String userName, int userAge) {
    		name = userName;
    		age = userAge;
    	}
    
    	public void showMe() {
    		System.out.println("我是" + name);
    	}
    }
    

    自定义构造器后,成员变量设置了默认值,默认值是在自定义构造器当中最开始设置的。

    java 源文件:

    public class User {
    	String name = "smile";
    	int age = 20;
    	
    	public User() {
    		name = "xzh";
    		age = 18;
    	}
    	
    	public User(String userName, int userAge) {
    		name = userName;
    		age = userAge;
    	}
    
    	public void showMe() {
    		System.out.println("我是" + name);
    	}
    }
    

    通过反编译后:

    import java.io.PrintStream;
    
    public class User
    {
    
    	String name;
    	int age;
    
    	public User()
    	{
    		name = "smile";
    		age = 20;
    		name = "xzh";
    		age = 18;
    	}
    
    	public User(String userName, int userAge)
    	{
    		name = "smile";
    		age = 20;
    		name = userName;
    		age = userAge;
    	}
    
    	public void showMe()
    	{
    		System.out.println((new StringBuilder("我是")).append(name).toString());
    	}
    }
    

    构造器的重载

    1. 可以定义多个构造器,构造器的名称相同,参数不同。
    2. 在创建对象时,根据不同的参数,调用不同的构造器。
  • 相关阅读:
    MySQL错误:The user specified as a definer (XXX@XXX) does not exist (1449错误)最简解决方案
    个人亲测,在win10系统下安装多实例mysql详细教程
    Quartus II 9.1 + ModelSim-Altera 6.5b
    MathType Translation Error
    从txt文件中读取数据放在二维数组中
    VMware Player安装Debian系统
    linux下JDK安装
    Vector、HashTable、HashMap和ConcurrentHashMap
    线程池策略(一)
    Runnable、Callable和Future
  • 原文地址:https://www.cnblogs.com/xzh0717/p/11113369.html
Copyright © 2011-2022 走看看