JAVA面向对象

知识点:面向对象
一、概述
面向对象与面向过程都是我们编程中,编写程序的一种思维方式

1.面向过程:从无到有所有的操作都的自己完成.
面向过程的程序设计举个例子:遇到一件事情,思考“我们应该怎么打扫卫生”,然后通过“扫地,拖地,倒垃圾等一些列方式一步一步来解决打扫卫生这个问题”。
面向过程开发:面向着具体的每一个步骤和过程,把每一个步骤和过程完成,然后通过这些功能和方法来完成需求。

2.面向对象:以对象为基准,任何属性和行为都是基于对象的,所有的事情都是通过对象来完成.
面向对象的程序设计举个例子:遇到一件事情,比如“我们应该怎么打扫卫生”,首先思考“我该让谁来做”,比如让“小李”来扫地,“小王”来拖地,“小张”倒垃圾,而这"小李",“小王”,“小张”就是对象,
他们要怎么具体的做这件事不用我们管,我们只关心 他们(“小李”,“小王”,“小张” 就是一个个对象)合力把这件事做好。

二、类与实例
类使用class修饰
类:具备共同的属性和行为的事物.(注意:类是没有标准答案的)
属性:变量.
行为:方法.
在这里插入图片描述
对象(实例):从类中抽取出来实实在在存在的个体,并且个体就叫做对象,并且对象是类中定义的属性和行为的可执行者.
获取对象:使用关键字 new
类名 对象名(自定义符合小驼峰) = new 类型();
在这里插入图片描述

三,局部变量和成员变量

A.定义位置区别:
  1.成员变量在方法之外,类之内的
  2.局部变量方法之内

B.作用上的区别:
  1.成员变量作用是描述一类公共属性的;
  2.局部变量的作用是提供一个变量给方法内部使用

C.生命周期的区别:
  1.随着对象的创建而存在,随着对象的消失而消失
  2.局部变量在调用对应的方法是执行到创建该变量的语句时,局部变量一旦出了自己的作用域,那么马上从内存中消失

D.初始值
  1.成员变量有默认初始值.
  2.局部变量没有默认初始值,必须先赋初始值才能使用.

建立一个类TestDemo

public class TestDemo {
    String name = "成员变量";   //成员变量在方法之外,类之内的

    public static void main(String[] args) {
        new TestDemo ().show();
    }

    public void show() {
        String name = "局部变量";    //局部变量方法之内  
        System.out.println(name);
    }
}

四,JAVA面向对象三大特性
java的三大特性:
1,封装
2,继承
3 ,多态

1.封装: 将不想向外 公布的细节隐藏, 只向外提供公共的使用接口.(隐藏具体的代码,只公布一个方法名作为接口)
(java里面最小的封装单元是方法)
作用:保护细节不被破坏.

访问修饰符 :可以修饰类,可以修饰成员函数,可以修饰成员变量
default:当定义的时候,什么都不写,就表示默认的
public:任何地方都能够调用或者使用的代码
protected:子类访问权限:本类内部可以访问,不同包的子类也可以访问,同包其他类也可以访问,能继承到子类;
private:只能在本类中使用
注意:类的访问修饰符,只能使用默认或者public
成员方法和成员属性四个访问修饰符都能使用

2.继承
什么是继承?
继承:子类继承父类的所有公有的属性和行为.
在这里插入图片描述
下面我们来看一个例子:我们来创建以一个动物类,表示动物这个物种。

public class Animal {

    //动物的体重

    private int weight;
			
    public int getWeight() {
    return weight;
    }
			 //设置体重的方法
    public void setWeight(int weight) {
    this.weight = weight;
    }  
}

接着我们来创建一个子类Dog类,继承Animal这个类,Dog类也拥有了父类Animal的属性和方法。

我们在Dog类里增加一个用于描述狗叫的方法。

public class Dog extends Animal {

  //Bark为狗叫的方法
  public void Bark(){
  System.out.println("汪~~~~~~汪~~~");
  }
  //最后我们来测试Dog是否真的拥有了父类Animal的一些方法和属性呢?

  public static void main(String[] args) {
    Dog myDog=new Dog();
    //狗狗设置体重为200
    myDog.setWeight(200);
   		//输出 
    System.out.println("狗狗的体重是"+myDog.getWeight()+“===”);
    //加一个狗狗子类自己方法
    myDog.Bark();
		}

}

输出结果是:狗狗的体重是200===汪~~~~~
说明子类Dog完美的继承了父类Animal的属性和方法。

什么时候会用到继承?
当多个类当中出现了相同的属性和行为,则将相同的部分向上抽取,抽取成父类,子类只用继承即可.(final是不能被继承的)

继承的方法:
使用关键字 extends 这个关键字是在子类上面用的,写在子类的类名后面,在extends关键字后面跟父类的类名.
①子类一旦继承了父类,则可以调用父类的所有非私有的属性和行为.(一个父类下,所有的子类权限一致)
②一直强调,子类只能够调用父类的非私有属性和行为.
③一定要记得,不能什么属性和行为都往父类进行抽取.
④一定是所有类中的所有公用的属性和行为才用来继承

额外:super关键字
在子类的每一个构造函数里面的第一行是加上了super关键字的
在这里插入图片描述

3.多态
什么是多态?
一个事物具备多种形态,比如学生,学生是人的一种,则 一个具体的同学“学生张三” 既是 学生 也是 人,即出现两种形态。
多态的前提:
①要有继承或者实现
②还有方法的重写
③父类引用指向子类对象

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果传过来的是 student对象
则输出:学生 吃饭 睡觉 做梦 的方法
如果传过来的是 teacher对象
则输出:老师 吃饭 睡觉 做梦 的方法

补充:向上转型和向下转型
向上转型
Person student = new Student()
用父类的声明 创建一个子类的对象,将子类的范围扩大,但是向上转型,不能执行子类特有的方法.
所以需要 向下转型
将一个对象的父类声明再转回子类声明.需要强制转换
在这里插入图片描述

题外话:
一个方法名,参数不同,这叫方法重载。(Overload)

void foo(String str);
void foo(int number);

父类与子类有同样的方法名和参数,这叫重写。(Override)

class Parent {
    void foo() {
        System.out.println("Parent foo()");
    }
}
class Child extends Parent {
    void foo() {
        System.out.println("Child foo()");
    }
}

总结:
1,面向对象是把一组数据结构和处理他们的方法组成对象。
2,把具有相同行为的对象归纳成类。
3,通过封装隐藏类的内部细节。
4,通过继承使类得到泛化。
5,通过多态实现基于对象类型的动态分派。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值