java面向对象基础(随笔)

版权声明:转载请标明出处: https://blog.csdn.net/gaofengyan/article/details/86470216

目录

一、Java方法                                                                          二、JAVA中的类和对象

三、什么是JAVA中的封装                                                       四、使用包管理JAVA中的类

五、访问修饰符                                                                       六、JAVA中的继承

七、JAVA中的方法重写                                                           八、JAVA中super的应用

九、equals 和== 的区别:                                                      十、JAVA中的多态

十一、引用类型转换                                                               十二、抽象类


一、Java方法

(一)、如何定义JAVA中的方法

所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块。

一般情况下,定义一个方法的语法是:[访问修饰符] 返回值类型 方法名(参数列表){方法体}

1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用。

2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值。

3、 方法名:定义的方法的名字,必须使用合法的标识符。

4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开。

根据方法是否带参、是否带返回值,可将方法分为四类:

  1. 无参无返回值方法
  2. 无参带返回值方法
  3. 带参无返回值方法
  4. 带参带返回值方法

(二)、JAVA中无参无返回值方法的使用

如果方法不包含参数,且没有返回值,我们称为无参无返回值的方法。

方法的使用分两步:

第一步,定义方法 public void show(){……}

注意:

1、 方法体放在一对大括号中,实现特定的操作

2、 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式

第二步,调用方法,当需要调用方法执行某个操作时,可以先创建类的对象,然后通过 对象名.方法名(); 来实现。

(三)、JAVA中无参带返回值方法的使用

       如果方法不包含参数,但有返回值,我们称为无参带返回值的方法。调用带返回值的方法时需要注意,由于方法执行后会返回一个结果,因此在调用带返回值方法时一般都会接收其返回值并进行处理。接收方法返回值的语法一般是:

       数据类型 变量名=对象.方法(); // 这样可以利用这个返回值,把返回值赋给变量。

      方法的返回值最多只能有一个,不能返回多个值,类型一定要匹配,return 返回值;

(四)、JAVA中带参无返回值方法的使用

       有时方法的执行需要依赖于某些条件,换句话说,要想通过方法完成特定的功能,需要为其提供额外的信息才行。我们可以通过在方法中加入参数列表接收外部传入的数据信息,参数可以是任意的基本类型数据或引用类型数据。

以下是一个带参数,但没有返回值的方法:

         

       调用带参方法与调用无参方法的语法类似,但在调用时必须传入实际的参数值:

对象名.方法名(实参1,实参2,……实参n)

       很多时候,我们把定义方法时的参数称为形参,目的是用来定义方法需要传入的参数的个数和类型;把调用方法时的参数称为实参,是传递给方法真正被处理的值。

注意:

1、 调用带参方法时,必须保证实参的数量、类型、顺序与形参一一对应。

2、 调用方法时,实参不需要指定数据类型。

3、 方法的参数可以是基本数据类型,如 int、double 等,也可以是引用数据类型,如 String、数组等。

4、 当方法参数有多个时,多个参数间以逗号分隔。

(五)、JAVA中带参带返回值方法的使用

如果方法既包含参数,又带有返回值,我们称为带参带返回值的方法。

(六)、JAVA中方法的重载

什么是方法的重载:

如果同一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了。如下所示 4 个方法名称都为 show ,但方法的参数有所不同,因此都属于方法的重载,如:

      

   区分调用的是哪个重载方法:

当调用被重载的方法时, Java 会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行。如:

      

判断方法重载的依据:

  1.  必须是在同一个类中
  2.  方法名相同
  3.  方法参数的个数、顺序或类型不同
  4.  与方法的修饰符或返回值没有关系

练习---要求:

1、 考试成绩已保存在数组 scores 中,数组元素依次为 89 , -23 , 64 , 91 , 119 , 52 , 73

2、 要求通过自定义方法来实现成绩排名并输出操作,将成绩数组作为参数传入

3、 要求判断成绩的有效性( 0—100 ),如果成绩无效,则忽略此成绩

  

二、JAVA中的类和对象

(一)什么是类和对象

        类是模子,确定对象会拥有的特征(属性)和行为(方法),类的特点:类是对象的类型,具有相同属性和方法的一组对象的集合。对象是类的实例,什么是对象的属性?属性是对象拥有的各种特征;每个对象的每个属性都拥有特定值,对象的方法也就是对象执行的操作。类是抽象的概念,仅仅是模板,客观不存在。而对象是你可以看得到摸得到的具体实体,客观存在。

(二)如何定义JAVA中的类

      定义类

1、类的重要性:所有的JAVA程序都以类class为组织单元;

2、什么是类:类是模子,确定对象会拥有的特征(属性)和行为(方法);

3、类的组成:属性和方法;

4、定义一个类的步骤:

    a.定义类名 public class 类名{}

    b.编写类的属性 //定义属性部分,可以从属性1—属性n,也可以没有

    c.编写类的方法 //定义方法部分,可以从方法1—方法n,也可以没有。

(三)如何使用JAVA中的对象

使用对象的步骤:

1、创建对象 Telphone phone=new Telphone();phone对象就是Telphone类型的。类名 对象名=new 类名(); 这个语法就是对象的实例化。

2、通过对象名来使用这个对象,引用对象的属性:对象.属性,可以引用赋值;对象.属性=xx;对象.方法名,调用方法。类是以代码形式保存在文件当中,当我把文件信息放在内存中,这些信息的集合我们就把它称为对象,这个过程我们就叫做实例化。Telphone phone=new Telphone();把对象赋给了对象名这个变量,实际phone这个变量名只是指向了这个对象的空间地址。new 一个类名加上小括号() 这就是实例化,然后赋给某个变量名,变量的类型就是对象的类型,即所属类这个类型。刚创建对象时如果没有给属性赋值,则是默认值,通常使用对象会用两个操作,即给实例变量赋值,或者调用对象的方法。

(四)JAVA中的成员变量和局部变量

1.成员变量 在类中定义,用来描述对象将要有什么

2.局部变量 在方法中定义,在类的方法中临时保存数据

局部变量仅自己所在的方法可以使用,成员变量,类中的所有方法都可使用,其它跟本类有关系的方法也可使用。

成员变量和局部变量的区别:

1.作用域不同,成员变量的作用域在整个类内部都是可见的,局部变量的作用域仅限于定义它的方法

2.初始值不同,JAVA会给成员变量一个初始值,不会给局部变量初始值,要赋值后使用

3.在同一个方法中,不允许有同名局部变量,不同的方法中可以有同名局部变量

4.变量同名时,就近原则,如调用方法中有该同名变量则优先调用。

(五)JAVA中的构造方法

Telphone phone=new Telphone();new后面这个实际是Telphone()的无参构造方法

1.使用new+构造方法,创建一个新的对象。其实new后面跟的并不是我们的类名,而是我们的构造方法,也就是说我们在创建对象的时候就会使用我们的构造方法;

2.构造方法是定义在JAVA类中的一个用来初始化对象的方法。构造方法也是方法,它和我们普通的构造方法不同之处在于,我们以前的方法,只是代表对象可以干什么,而构造方法,它可以创建一个对象,并且初始化对象的值,所以说同样是方法,含义是不同的,还有一个特点:构造方法与类名相同,且没有返回值。构造方法的语法格式:public 类名(){//初始化代码} 其中类名也就是构造方法名,()中可以指定参数,没有参数的即是无参构造方法,指定参数的是有参构造方法;

3.如果没有指定一个无参的构造方法,系统会自动帮我们生成一个,如果我们对无参的构造方法不满意,可以自己再重新构造一个,创建对象的时候我们执行的就是构造方法;

4.带参的构造方法目的只有一个,就是初始化我们对象的成员变量值,在创建对象的时候,把参数传递进去。例如有参的构造方法:

public Telphone(float newScreen,float newCpu){

screen=newScreen;

cpu=newCpu;

}

       创建对象的时候传参数,把参数列表的值赋给我们的成员变量,有参的方法可以和无参的方法并存,通过无参的构造方法可以创建对象,有参的不仅可以创建对象还可以给实例对象的变量赋值;

5.当有指定的构造方法时,无论是有参还是无参的构造方法,系统都不会自动添加无参的构造方法;

6.重载,方法名相同但参数不同的多个方法,调用时会自动根据不同的参数来选择对应的方法;

7.构造方法不但可以给对象的属性赋值,还可以保证给对现象的属性赋一个合理的值,if语句也可以设置错误时默认值。

三、什么是JAVA中的封装

面向对象的三大特性:封装、继承、多态。

1.概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法,来实现对隐藏信息的操作和访问。

2.好处:

    a只能通过规定的方法访问数据

    b隐藏类的实例细节,方便修改和实现

3.封装的实现步骤

修改属性的可见性,改为设为private;创建getter/setter方法,用于属性的读写,创建一个特定的方法,一般是gettersetter方法,可以在gettersetter方法中加入属性控制语句,对属性值的合法性进行判断,举例来说:

public float getScreen(){

return screen;

}  

public void setScreen(float screen){

this.screen=screen;

}

四、使用包管理JAVA中的类

封装的类名可能冲突,用包可以解决

1.包的作用,管理JAVA文件夹,管理同名文件冲突

2.定义包,package关键字

3.系统中的包

java.(功能).(类)

java.lang.类 包含java语言基础的类

java.util.类 包含java与语言中的各种工具类

java.io.类 包含输入输出相关功能类

4.包的使用

import 使用关键字可以在某个文件中使用其他文件中的类,全部都是小写

import com.imooc.music.Myclass;

import com.*是包下所有的类

五、访问修饰符

修饰我们属性和方法的访问范围

private 本类

默认 本类 同包

protected 本类 同包 子类

public 本类 同包 子类 其他

六、JAVA中的继承

1.继承的概念:它是类和类的一种关系,“is a”的关系,java中的继承是一种单继承,一个类只有一个父类,superclass 父类;

2.继承的好处:子类拥有父类的所有属性和方法。private修饰的无效子类不能拥有,private的属性继承不了。java的继承可以实现代码复用;

3.语法规则 class 子类 extends 父类{ },idea中快速建立子类的办法,在当前public class 这行 alt+enter 然后选择subclass。

七、JAVA中的方法重写

1、对父类的方法不满意时,子类可以重写这个方法,并且在子类调用时会优先调用子类的方法。

2、语法规则:返回值类型、方法名、参数类型及个数都要与父类继承的方法相同,这才叫方法的重写。

重写和重载的区别:

1.重写必须继承,重载不用。

2.重写的方法名,参数数目相同,参数类型兼容,重载的方法名相同,参数列表不同。

3.重写的方法修饰符大于等于父类的方法,重载和修饰符无关。

4.重写不可以抛出父类没有抛出的一般异常,可以抛出运行时异常。

八、JAVA中super的应用

super关键字,可以代表父类对象,访问父类的属性 super.age;调用父类的方法 super.eat();

注意:父类对象的属性和子类对象的属性并无关系,是两个属性。当一个类继承与另一个类,子类中没有父类的方法时,用子类的对象调用方法会优先在子类中查找该方法,再到父类中找。当一个方法只在父类中定义时,调用该方法会使用父类中的属性。如果该方法中又调用了其它方法,还是先子类找再父类找。

super在构造方法中的应用

1.子类构造中必须调用其父类的构造方法

2.如果子类的构造方法中没有显示调用父类的构造方法,则系统默认调用父类的无参构造方法 super();隐式调用,如果显示调用方法,必须在子类构造方法中的第一行

3.如果子类构造方法中既没有显示调用父类的构造方法,而父类又没有无参构造方法,则编译出错。

this和super用法总结:

1.this是自身的一个对象,代表对象本身,可理解为指向对象的一个指针

this的用法在java中大体可以分为三种:

a.普通的直接引用,this相当于指向当前对象本身

b.形参与成员名重名,用this来加以区分

c.引用构造函数

2.super可以理解为指向自己超(父)类对象的一个指针,而这个超累指的是离自己最近的一个父类

super也有三种直接用法

a.普通的直接引用,super相当于只想当前对象的父类,可以用super.XX来引用父类的成员

b.子类的成员变量或方法与父类中的成员变量或方法名重名

c.引用构造函数

super(参数):参数也可能为空,应该为构造函数的第一条语句,调用父类的构造函数

this(参数):在构造函数的第一条语句,调用本类中另一种形式的构造函数。

九、equals 和== 的区别:

     

十、JAVA中的多态

对象的多种形态,继承是多态的实现基础。

1.引用多态

父类的引用可以指向本类的对象

父类的引用可以指向子类的对象

Animal obj1=new Animal();

Animal obj2=new Dog();

2.方法多态

        创建本类对象,调用的方法为本类方法;创建子类对象,调用的方法为子类重写的方法或者继承的方法。如果是独有的方法(子类新建的方法,不与继承方法同名,非重写,父类的引用指向子类的对象时(多态情况下),不能调用该方法)注意不能使用子类的引用指向父类对象。

十一、引用类型转换

          这里说的对象类型转换,是指存在继承关系的对象,不是任意类型的对象。当对不存在继承关系的对象进行强制类型转换时,java 运行时将抛出 java.lang.ClassCastException 异常。

1.向上类型转换(隐式/自动类型转换),是从小类型到大类型的转换

2.向下类型转换(强制类型转换),是从大类型到小类型,这种转换有风险,可能会溢出。

3.instanceof运算符,解决引用对象的类型,避免类型转换的安全问题

       在继承链中,我们将子类向父类转换称为“向上转型”,将父类向子类转换称为“向下转型”。很多时候,我们会将变量定义为父类的类型,却引用子类的对象,这个过程就是向上转型。程序运行时通过动态绑定来实现对子类方法的调用,也就是多态性。然而有些时候为了完成某些父类没有的功能,我们需要将向上转型后的子类对象再转成子类,调用子类的方法,这就是向下转型。注意:不能直接将父类的对象强制转换为子类类型,只能将向上转型后的子类对象再次转换为子类类型。也就是说,子类对象必须向上转型后,才能再向下转型。

Dog dog=new Dog();

Animal animal=dog;

Cat cat=(Cat)animal;

        编译时不会出错(按Cat类型进行编译),但运行时会报错,因为它开辟的是Dog类型的空间,而(无法将引用类型进行转换)无法将dog对象转换成Cat类型,并且此方法对程序的安全性有影响。此时应该利用instanceof和if语句结合使用,进行验证,以保证程序的安全性,如:

if(animal instanceof Cat){//判断animal类中是否包含Cat类型的元素,若包含则进行转换,instanceof返回值为布尔类型Cat cat=(Cat)animal;

}else{System.out.println("无法进行类型转换");

}

        instanceof可以判断一个引用是否是某个类型或者是某个类型的子类型,它会返回一个布尔值。if(animal instanceof Cat) 如果你这个对象里含有cat元素,就可以转换由于animal先被转换成了Dog类型,指向了dog的内存空间,类型不匹配。

十二、抽象类

1.语法:抽象类前使用abstract关键字修饰

2.应用场景

a.约束子类,在某些情况下,某个父类只是知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法

b.可以把有多个相同特征的类抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性

3.作用:限制规定子类必须实现某些方法,但不关注实现细节

4.使用规则

a.abstract定义抽象类

b.abstract定义抽象方法,只有声明,不需要实现

c.包含抽象方法的类是抽象类

d.抽象类中可以包含普通方法,也可以没有抽象方法

e.抽象类不能直接创建,通常是使用它定义一个引用变量,指向一个子类对象

抽象类没有方法体,分号结束。

public abstract void call{};

猜你喜欢

转载自blog.csdn.net/gaofengyan/article/details/86470216
今日推荐