Java面向对象


面向对象编程(OOP: object-oriented programming)

定义:

​ 就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。 面向对象顾名思义就是把现实中的事务都抽象成为程序设计中的“对象”,其基本思想是一切皆对象。

理解:

​ 在显示生活中,每个东西都是一个对象,例如:一只小花猫就是一个对象,它有名字,品种,毛色等属性。有猫叫,吃食物,喝水等行为(方法)。所以每只猫就是一个对象。

类 :

​ 是一类事物的模板,描述一类事物共有的属性和行为,比如猫类。

对象:

​ 对象是类的一个实例(不是找一个对象),有属性和行为。比如上面讲到的小花猫就是猫类的一个对象,它有猫的一些共同的特性。

面向对象的三大特征

1.封装:

​ 将对象的属性和行为封装成一个密不可分的整体。将一些不想被外界访问的属性和方法封装成的私有的,只对外暴露一个入口。

封装步骤:

​ 属性私有化:将属性封装成私有的private,将name和age设置为私有,只能本类访问,其他类不能访问,对信息进行了隐藏。

public class Person { 
    private String name; 
    private int age; 
}
	留入口: 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,(get/set方法)
public class Person{ 
    private String name;
    private int age; 
 
    public int getAge(){
        return age; 
    } 
 
    public void setAge(int age){ 
        this.age = age; 
    } 
 
    public String getName(){ 
        return name; 
    } 
 
    public void setName(String name){ 
        this.name = name; 
    }
 
    public boolean isAlive() {
		return alive;
	}
}

使用this关键字是为了解决实例变量和局部变量重名的问题。

封装可以提高代码的安全性,比如一般的类的属性不用private修饰,直接可以 key= value ,当我们使用private修饰之后就无法随意修改了,而且还可以做一些判断条件比如age属性:

public void setAge(int age){
    if(age>100 ||age<0){
		System.out.println("年龄异常~")
            return;
    }else{
		this.name = name;
    }
}
封装的细节:
  1. 私有化属性
  2. 提供get(获取)和set(设置)方法
2.继承:

​ 关键字:extends

​ 继承就是子类继承父类的特征和行为。让子类对象拥有父类的属性和方法。

继承实现:
public class Person{} //父类

public class Student extends Person{} //子类 ,extends关键字使子类继承父类

继承的好处:

  1. 提高代码复用性
  2. 提高代码可维护性
  3. 使得类和类之间产生了关系,是多态的前提
3.多态:

​ 在java中有两种多态,一种是方法多态(重写,重载),另外一种是对象的多态(向上转型、向下转型)

  1. 方法的多态

    1. 重写:当父类的方法无法满足子类需求时,子类重新在子类中写一遍该方法(返回值类型,方法名,参数列表都要与父类一致)

      	//父类run方法
      	public class Person {
      		//父类的run方法
      		public void run(){  
      			System.out.println("人类会跑~");
      		}
          }
          
          //不满足子类需求,子类重写run方法
      	public class Student extend Person{
              @Override
              public void run(){
                  System.out.println("学生,跑的飞快~");
              }
          }
      
      	//测试:
          //创建学生对象
          Student s = new Student();
      
          //调用的是子类重写的run
          s.run(); 	//学生跑的飞快~
      
    2. 重载:在同一个类中,有多个相同需求的功能,但各有不同。就可以使用方法重载(方法名一样,参数列表的数量或者数据类型不同),系统会根据传递的实参自动匹配对应的方法。

      public class Test02{
      	public static void main(String[] args){
      		
      		//需求:传入2个int值返回最大值
      		System.out.println(getMax(10,20));
      		//需求:传入3个int值返回最大值
      		System.out.println(getMax(10,20,30));
      		//需求:传入2个double值返回最大值
      		System.out.println(getMax(10.0,20.0));
      		//需求:传入3个double值返回最大值
      		System.out.println(getMax(10.0,20.0,30.0));
      	}
      	public static int getMax(int a,int b){
      		return a>b?a:b;
      	}
      	public static int getMax(int a,int b,int c){
      		return getMax(getMax(a,b),c);
      	}
      	public static double getMax(double a,double b){
      		return a>b?a:b;
      	}
      	public static double getMax(double a,double b,double c){
      		return getMax(getMax(a,b),c);
      	}
      }
      
  2. 对象的多态

    1. 向上转型:子类对象变为父类对象(自动)

      Person person = new Student();  //向上转型
      
    2. 向下转型:父类对象变为子类对象(强制)

      Student student = new Person(); //向下转型
      

总结:

​ 面向对象编程就是把一切事物都看作为一个对象,都拥有属性和行为。可以通过调用属性和行为对该事物进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值