面向对象编程

Posted 日常写bug

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象编程相关的知识,希望对你有一定的参考价值。

创建对象并使用

Student student = new Student()

使用对象的属性

student.name = "leader";

System.out.println(student.age);

使用对象的方法

student.study();

方法的定义

修饰符   返回值类型  方法名(参数列表){

方法体

return 返回值;

返回值类型要和返回值匹配。

public void study(){

System.out.println(name+"正在学习");

}

方法签名就是:方法名+参数列表

 

方法类型

 

有返回值:

1.有参数列表

2.没有参数列表

没有返回值

1.有参数列表

2.没有参数列表

 

形参和实参

//此处a和b是形参

public int add(int a,int b){

int temp =0;

if(temp < a){

temp = a;

}

if(temp < b){

temp = b;

}

return temp;

}

//此处的34和89是实参

student.add(34,89);

int x =70;

int y =50;

//x和y是实参

student.add(x,y);

 

局部变量:定义在方法体或者是方法的声明上的变量

作用范围:整个方法。

使用:声明后必须赋值才能使用

a和b就是局部变量

成员变量:属性就是成员变量

作用范围:整个类。

使用:可以直接使用,因为系统会给成员变量赋默认值

name,banji,id,age 就是成员变量

 

String类的使用:

String对象是不可变的。

String的各种方法:API文档

 

面向对象的三大特征:

封装、  继承、  多态

封装:

1.创建类就是一种封装

2.对属性私有化,同时提供公开的set、get方法

public class HH{

private String aa;

private int bb;

 

public String getAa() {

return aa;

}

public void setAa(String aa) {

this.aa = aa;

}

public int getBb() {

return bb;

}

public void setBb(int bb) {

this.bb = bb;

}

}

除非必须公开底层实现细节,否则应该将所有字段指定为private加以封装

使用字段封装,通过增加数据访问限制,增强了类的可维护性

四种访问修饰符:

public  protected default(默认) private

 

public:在什么地方都可以访问。

private:只能在本类中可以访问

 

构造方法

1.方法名和类名一样

2.没有返回值类型

public Student(){

}

public Student(String name,int age){

this.name = name;

this.age =age;

}

构造方法的作用:创建对象时给属性赋值

 

this关键字:当前对象的引用。

用来处理成员变量和方法中的局部变量同名时的问题

public setName(String a){

name = a;

}

 

public void setName(String name){

this.name = name;

}

 

this();当前对象的无参构造方法,只能用在构造方法中,并且必须放在第一句。

this(参数);调用有参构造方法。

public Student(String name,int age){

this();//调用了无参构造方法。

this.name = name;

this.age = age;

}

 

static关键字:

凡是被static修饰就称为静态属性或静态方法

1.随着类的加载而加载,优先于对象的存在。

2.只执行一次。(因为类只加载一次)    共享

3.静态的只能访问静态的

static int a = 10;

int b =20;

public static void study(){

System.out.println("静态方法");

System.out.println(a);

//System.out.println(b);错误,因为b在内存中还不存在

}

4.静态方法中不能使用this关键字

使用:类名.静态属性    或者 类名.静态方法

Student.study();

 

单例模式:

1.static

2.构造方法私有化。

 

重载(overload):在一个类中,方法名相同而参数列表不同的方法可以同时存在

public void run(){

System.out.println("我能跑2000米");

}

public void run(int b){

System.out.println("我能跑"+b+"米");

}

方法的重载就是方法签名不同。

 

 

继承

//People  就是父类

class People{

String name = "leader";

int age;

 

public People() {

System.out.println("父类的无参构造方法");

}

 

public void show(){

System.out.println(name+"-------"+age);

}

}

//Teacher  就是子类

class Teacher extends People{

String name ="mahatma";

 

public Teacher() {

super();//不写的话会默认调用父类的无参构造方法

System.out.println("子类的无参构造方法");

}

 

public Teacher(String name){

this.name =name;

System.out.println("子类的有参构造方法");

}

 

public void t(){

//super:区分子父类出现的同名成员。

System.out.println(name);

System.out.println(super.name);

}

public void show(){

System.out.println("代码重写,实现多态");

}

}

 

作用:代码重用。

 

super关键字:父类对象的引用

 

Teacher t = new Teacher();

t.t();

子类中所有的构造方法都会默认的调用super();来对父类对象初始化。

 

super();//只能放在第一行,并且只能在子类的构造方法中使用

 

重写:子类对从父类继承过来的方法进行改写,是多态机制的前奏

 

注意:

1.继承

2.方法名称、参数列表、返回值类型都不能改变         

3.权限只能越来越大。但是一般情况下保持一致

4.父类的私有方法不能被重写

5.在子类的重写方法中如果需要调用父类的被重写方法,可以通过super.方法

 

final关键字:修饰类,变量,方法

修饰后的改变:

类:不能被继承

变量:一旦赋值,不能在改变

方法:不能被重写

 

所有的类都直接或者间接继承Object类

 

toString();//打印对象时默认调用

equals();//比较对象的内容。

 

多态:

1.继承

2.重写

3.父类对象对子类对象的引用(父类引用指向子类对象)

 

People people = new Teacher();

 

作用:用来做参数的传递。

以上是关于面向对象编程的主要内容,如果未能解决你的问题,请参考以下文章

Golang 面向对象编程

Python入门-6面向对象编程:01面向对象和面向过程区别-对象的进化

如何在C语言里实现“面向对象编程”

面向对象(对象和类)

面向对象编程——面向对象和面向过程

面向对象编程