简述面向对象相关

浅谈java面向对象


1、概述


面向对象程序设计(Object Oriented Programming),本质是以建立模型体现出来的抽象思维过程和面向对象的方法。 模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事物的一切具体特征,只能对事物特征和变化规律的一种抽象,且在它所涉及的范围内更普遍、更集中、更深刻地描述客体的特征。通过建立模型而达到的抽象是人们对客体认识的深化。

2、特征


  • 封装性:把客观事物封装成抽象的类,并且类可以把⾃⼰的数据和⽅法只让可信的类或者对象操作,对不可信的信息隐藏。
  • 继承性:继承是指这样⼀种能⼒:它可以使⽤现有类的所有功能,并在⽆需重新编写原来的类的情况下对这些功能进⾏扩展。
  • 多态性:指⼀个类实例的相同⽅法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接⼝。

3、类与对象


  • 类是我们定义的一个模板,对象即是对这个模板的具体填充。例如,人是一个类,可以有张三这个具体对象,牛是一个类,可以有张三家的那头年龄最大的牛这个具体对象。

  • 类的组成

    • 属性(描述对象特点,譬如牛类的一个对象张三家的那头年龄最大的牛,年龄就是这个对象的属性之一)
    • 方法(即这个类可以进行的操作,譬如牛这个类,他们具有耕地、拉车、吃饭、睡觉等操作)
  • 类的定义

    使用关键字class:

    权限修饰符 class 类名{
        成员变量定义;
        构造方法定义;
        静态或实例代码初始化块;
        成员方法定义;
    }
    
    例子:定义一个类Person
    public class Person{
    	private int age;//年龄
         private String name;//名字
         private String IDCardNum;//身份证号
         protected double money;//财富量
         public String location;//居住地址
         
         public Person(){//一个空参构造器
         }
         public Person(int age, String name, String id, double money, String location){//重载一个可以给所有属性都赋值的构造器,
         	this.age = age;
         	this.name = name;
         	this.IDCardNumm = id;
         	this.money = money;
         	this.location = location;
         }
         public String name(){//返回当前对象的姓名
            return this.name;
         }
         public int getAge(){//返回当前对象的年龄
            return this.age;
         }
         public void eat(){//描述吃饭行为
         }
    }

    其中需要注意:

    1. 构造器(构造函数):用于对象初始化,格式为: 权限修饰符 类名(参数列表){函数体}
    2. this关键字:this所指的是当前对象的引用
    3. 权限修饰符:
      • public: 类外可访问,所有包
      • private:类外不可访问,体现封装的特点,可以在类里定义Get方法然后实现在类外来访问
      • protected:在同一个包及其子类(不同包)中的代码访问。
      • 无修饰符:在同一个包内可访问。
    4. static关键字:static修饰的方法或者属性,不依赖于类本身。
      • 修饰属性的时候,我们可以称这个属性为类属性,参考python中的类属性描述一样,这个类属性是描述类本身的属性的,譬如人这个类,它本身可以有数量这个属性,它不依赖于张三这个具体对象。
      • 修饰方法的时候,我们称被修饰的方法为静态方法,静态方法不可以访问非静态的属性或方法,非静态的方法可以访问静态的属性或方法。

4、继承与多态


  • 继承:在已有类的基础上,添加新的变量和方法,从而产生一个新的类。(是实现程序代码复用的有力手段,是创建新类的主要方法描述了现实世界中客观事物之间是一个"is a"的关系)

    • 定义格式 (extends关键字)
    class 子类名 extends 父类名 {
        成员变量定义;
        构造方法定义;
        静态或实例代码初始化块;
        成员方法定义;
    }

    Tips:

    1. 在类声明中,extends表明创建父类的子类。(我们也称父类为超类或基类)
    2. java仅支持单继承:也就是说extends后只能指定一个父类名,且这个父类是一个非final的可访问类。
    3. 缺省extends表示Object作为父类,由此可知所以的类都是Object的子类。
    4. super关键字:主要用于调用父类的构造器。
    5. final关键字:作为一个修饰符,他可以修饰属性(成员变量),也可以修饰方法和类。使用final修饰的属性必须在声明的时候或者在构造器中初始化;被final修饰的类不可以被继承,并且其所包含的方法都默认为final(不含属性);
  • 多态:由继承和封装所引出,指一个程序中同名的不同方法共存的情况。即同一个方法定义几个实现方式,根据情况执行不同的方式,“一个名字,多种们方法”。

    • 常见的形式:

      1. 方法重载:参数类型不同;参数顺序不同;参数个数不同;
      2. 方法覆写(覆盖/重写):返回类型、方法名、参数完全一致;访问级别不可低于父类;不能抛出更多的受检查异常类型;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值