Java面向对象知识点

Java面向对象知识点,第1张

一、

  1. 类和对象

(一)类是对同一类对象的属性和行为的封装。

(二)类的定义

定义了数据类型;类的定义不能是Java中的关键字(可由字母、下划线、数字或美元符号组成且第一个字符不可以是数字)。

Grammar:

class类名{}

  • 使用类实例化对象

定义类的“变量”叫做实例化对象(Object);如果不用关键字new分配内存,该对象为空值,不能使用。

Grammar:

类名 对象名 =new 类名();

  • 访问对象中的成员变量

局部变量作用于小且不赋值会报错;

成员变量作用域大,可赋值也可不赋值,不赋值则系统给定默认值,instance:0、0.0、false、null。

Grammar:

对象名.成员变量名;

  • 对象的引用性质

和数组名一样,对象名赋值只是将引用赋值,并不是将对象中的内容赋值。

  1. 成员函数

(一)简单的成员函数与调用方法

Grammar:

void函数名称(){}

对象名.函数名();

  • 带参数的成员函数

Grammar:

void函数名称(类型1参数名1,类型2参数名2,...类型n参数名n){}

对象名.函数名(参数值列表);

Attention:若函式的内部变量和类中的成员变量重名时可用“this”识别,以防成员变量被屏蔽。

  • 带返回类型的成员函数

Grammar:

返回类型 函数名称(类型1参数名1,类型2参数名2,...类型n参数名n){

return和函数返回类型一致的某个变量或对象;

}

对象名.函数名(参数值列表);

Attention:

(1)int abs(int a)定义了函数abs,返回一个整数类型的值

(2)int result=c.abs(-10);表示调用该函数,将返回值存入result变量

(3)若函数中途return则跳出,instance:

class Calc{

  Int abs(int a){

If(a>0){

  Return a;

}

Return-a;

}

}

  1. 没有返回类型的函数也可以使用return,表示跳出该函数,但是不能return一个人具体的值,instance:

void fun(int a){

...

Return;

...

}

  1. 在有些文献中,成员函数也称为成员方法(Method)。成员函数和成员变量统称为成员。

(四)函数参数的传递

(1)简单数据类型采用值传递,instance:

class Calc{

  void fun(int a){

  a=a+1;

}

}

public class ObjectTest{

  public static void main(String args[]){

  int a=10;

  Calc c=new Calc();

  c.fun(a);

  System.out.println(a=+a);

}

}

输出a为10;整数属于简单数据类型,调用时不在一个内存单元,等于是main中的值复制给fun中的a了。

  1. 引用数据类型采用引用传递,instance:

class Calc{

  void fun(int []arr){

  a=rr[0]arr[0]+1;

}

}

public class ObjectTest{

  public static void main(String args[]){

  Int[] arr={10};

  Calc c=new Calc();

  c.fun(arr);

  System.out.println(arr[0]=+arr[0]);

}

}

输出arr[0]为11;数组属于引用类型,虽不在一个内存单元,但指向同一个数组数组内存空间。

  • 函数重载(Overload)

方法重载又称静态多态,方法重载必须满足:

(1)参数的个数不同

(2)参数的个数相同,类型不同

(3)参数的个数相同、类型相同,但在参数列表中出现的顺序不同

  1. 构造函数

Grammar:

类名 对象名 =new 类名(传给构造函数的参数列表)

Attention:

(1)当一个类的对象被创建时,构造函数就会被自动调用;

(2)构造函数可以被重载;

(3)一个类中如果没有定义构造函数,系统会自动生成一个默认的构造函数,该函数没有参数不做任何事情。

二、

  1. 静态变量和静态函数
  • 静态变量应用

(1)保存跨对象信息;

(2)保存对象个数。

(二)静态函数

访问静态函数的Grammar:

类名.函数名;对象名.函数名;

代码块:

局部代码块{}方法

构造代码块{}类

静态代码块static{}

Attention:只运行一次。

  1. 封装的实现

(1)将不能暴露的成员隐藏(方法:private);

(2)用公共的方法暴露对该隐藏成员的访问(方法:public);

  1. 使用包

包的存在是为避免重名带来的麻烦

  • 将类放入包中

定义Grammar:

Package 包名

  • 访问包中的类

(1)在同一个包中,直接用类名访问,不用指定类所在的包

(2)两个类不在同一个包中,解决方法:

A:在使用类时指定类的路径,instance:

package chinesei;

class TeacherTest{

  Public static void main(String[] args){

school.admin.Teacher = new school.admin.Teacher();

 }

}

B:用import语句导入该类,instance:

package chinesei;

import school.admin.Teacher;

class TeacherTest{

  Public static void main(String[] args){

   Teacher teacher= new Teacher();

}

}

  

  1. 使用访问控制修饰符

()四个访问控制修饰符及其特性:

private:只能在定义它的类的内部被访问

default:可以在定义它的类的内部,也可以被这个包中的其他类访问

protected:可以在定义它的类的内部,也可以被这个包中的其他类访问

,还可以被包外的子类访问

public:可以在定义它的类的内部,也可以被包内、包外的所有其它类访问

Attention:一个Java文件中只能有一个public

因而,从开放程度上:private

  1. 类中类

顾名思义是在类中定义了类,也称为内部类

三、

  1. 使用继承

(一)继承及实现

(1)被继承的类被称为为父类、基类、超类,继承的类被称为子类、派生类(子类拥有的特征多于父类)

(2)Java不支持多重继承,但可以有多层继承。意思是一个子类只能有一个父类,允许A继承B、B又继承C。

(3)被继承的成员不可以是private,因为私有成员不允许在类的外部使用也不能被子类使用。(用setter和getter访问器访问)

(4)不考虑特殊,子类从父类继承的成员可当作自己的成员使用

Grammar:

 this.title=title;

(三)底层本质

实例化子类对象,系统会先调用父类无参数的构造函数去实例化一个父类对象。但如果父类没有无参数的构造函数,系统会在构造函数出报错,解决方案:

(1)给父类增加一个不带参数的空构造函数

(2)在子类的构造函数中,第一句用super给父类构造函数传参数

Attention:

super(title);  必须在第一句!

  1. 成员覆盖

(一)成员覆盖

子类中的成员函数的定义与父类相同,在子类中被隐藏。

(1)名称相同、参数列表相同、返回类型相同

(2)子类访问权限大于等于父类

Attention:

  1. Override不等于Overload
  2. 如果在子类中定义了一个名称和参数列表与父类相同的函数,但是返回类型不同,系统会报错
  3. 在重写时,子类函数的访问权限不能比父类更加严格
  4. 在覆盖的情况下可用super调用父类的成员函数

Grammar:

Super.函数名

  1. 使用多态

Attention:

A:函数重载是一种静态多态,下面为动态多态

B:父类和子类都有show函数,如果子类中没有则调用父类的,如果父类没有,则报错。

(一)使用多态

(1)函数传入的形参可以是父类类型,实际传入的可以是子类对象

(2)函数的返回类型是父类类型,而实际返回的可以是子类对象

  • 父类和子类对象的类型转换
  1. 子类类型对象转换成父类类型

instance:

Dialog dialog= new FontDialog();

(2)父类类型对象转换成子类类型

严格来讲是不可以的,但可用强制类型转换,instance:

Dialog dialog= new FontDialog();

FontDialog fd= (FontDialog)dialog;

  1. 抽象类和接口

(一)抽象类

Attention:

抽象类必须被子类继承,子类必须重写抽象类

Grammar:

abstract class 类名{

实例方法(){}

抽象方法;

}

(二)接口

(1)接口不能实例化,只能有方法的声明,不能有方法的实现

(2)不需要指明abstract,默认为抽象函数;接口中定义的变量全是全局静态常量;通过extends继承另一个接口,类通过关键字implements可实现一个接口;一个类可以在继承一个父类的同时实现一个或多个接口,instance:

class 子类 extends 父类 implements 接口1,接口2,...{}

Grammar:

接口名 对象名 = new 实现类的构造方法

  1. 其他
  • final

(1)用final修饰一个类,instance:

final class FontDialog{}

(2)用final修饰一个函数,instance:

class FontDialog{

public final void show();

}

(3)用final修饰一个成员变量,instance:

Class Math{

public final double PI = 3.1415926;

}

  • Object类
  1. toString方法
  2. equals方法

判断两个对象是否相等

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/738331.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存