java面向对象编程技术详解

本文深入讲解Java面向对象编程,包括类与对象的概念、类的继承、参数传递(构造器传参和构造方法传参)以及接口的使用。通过实例解析了继承减少代码冗余、接口的定义与实现,强调了抽象类和接口在面向对象编程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java面向对象编程

在这里插入图片描述

面向对象编程:是一种通过对象的方式,把现实世界映射到计算机模型的一种编程方法。
目录
  • 类与对象
  • 类的继承
  • 传递参数
  • 接口用法

1.类与对象

类:对一类事物的统称。

它是抽象的一个概念,比如说人,猫,小狗,小猪,没有一个具体的定位去描述它

对象:它是对应类的一个具体的实例。

它是具体的实例(instance),比如说人的一个实例对象为具体的我的爸爸,我的妈妈,我家的小狗,你是一个小笨猪。

创建对象的方式:对象类型 对象名=new 指定要创建为对象的类型() 如果你没有指定的实例化对象,一定要new一个啊
现实世界计算机模型
类(class)------ 代码:class Person()
小狗类(class)------代码:class SmallDog()
我的爸爸实例(instance)------代码:Person myfather=new Person()
我家的小狗实例(instance)------代码:SmallDog mydog=new SmallDog()

1.创建一个类(class),就相当于创建了一种数组类型。
2.每一个类和原有的数组类型可以创建多个实例,并且每个实例之间是互不干扰的。
3.创建了一个实例对象,该实例就相应拥有了该类定义的所有的属性和方法,就可以去调用该类的方法和属性。
4.创建一个实例对象就相当于在内存中给对象分配了一定的内存空间,而对象名就相当于一个门牌号,可以通过该对象名去访问该类的属性和方法。

2.类的继承

为什么要继承呢?我们可以先看一下如下的一些代码
//创建一个学生类
public class Student{
//学生学习的方法
public void study(){
System.out.println("我正在学习Java编程,天天搬砖很有乐趣啊!");
   }
//学生休息的方法
public void rest(int time){
System.out.println("我可以睡觉啦!先睡"+time+"个小时");
   }
}

如果这时候我们要写一个大学生对象,我们可以这样写:

//创建一个大学生类
public class UStudent{
//大学生学习的方法
public void study(){
System.out.println("我正在学习Java编程,天天搬砖很有乐趣啊!");
   }
//大学生休息的方法
public void rest(int time){
System.out.println("我可以睡觉啦!先睡"+time+"个小时");
   }
//大学生获得学分的方法
public void getscore(int studytime,int score){
socre=score+studytime/3;
System.out.println("我的当前学分为"+score);
   }  
}

不难发现除了大学生获得学分的方法,大学生类中学习和休息的方法和学生中的方法是一样的,所以为了减少代码的冗余和重复,我们可以采用继承的方法,让大学生类对继承学生类,从而大学生就拥有了学生类中学习和休息的方法,而且大学生还可以拥有自己获得学分的方法。于是上面的大学生类我们可以这样写:

//创建一个大学生类
public class UStudent extend Student{
大学生获得学分的方法
public void getscore(int studytime,int score){
socre=score+studytime/3;
System.out.println("我的当前学分为"+score);
   }  
}

接下类我们就可以去实例化大学生这个类,调用其从学生类继承过来的方法和自己特有的获得学分的方法:

//创建一个控制类
public class Master{
public static void main(String[] args){
	UStudent st1=new UStudent();//实例化大学生类,创建st1这个大学生对象
	st1.study();//调用大学生学习的方法
	st1.rest(2);//调用大学生休息的方法
	st1.getscore(15);//调用大学生获得学分的方法
}
	UStudent st2=new UStudent();//实例化大学生类,创建st2这个大学生对象,
	//这样我们创建了两个大学生对象,并且它们在调用方法是互不干扰,在自己的对象域中调用方法
	st2.study();//调用大学生学习的方法
	st2.rest(4);//调用大学生休息的方法
	st1.getscore(12);//调用大学生获得学分的方法
}

3.传递参数

在Java中传递参数可以使用二种方法:
  • 构造器传参
  • 构造方法传参
1.构造器传参

这里我们可以写一个老师类,老师获得学生的成绩来评判学生的成绩的优劣

// An highlighted block
public class Teacher{
private int studentScores;
public Teacher(int studentScores){//构造器的方法,初始化studentScores的值
this.studentScores=studentSocores;
  }
public void judge(){
 if(studentScores>=80){
System.out.println("该学生的成绩为优");
  }
 if(studentScores>=60&&studentScores<=80){
System.out.println("该学生的成绩为良");
  }
 if(studentScores<=60){
System.out.println("该学生的成绩不及格");
  }
}

接下来我们创建学生类,并且根据合适的构造方法来创建学生对象

// An highlighted block
public class Student{
private int studentScores=80;
public static void main(String[] args){
Student st1=new Student(studentScores);
//创建一个学生对象:一个参数构造器
Teacher teacher=new Teacher();
teacher.judge();//创建一个老师对象并去调用其判断成绩优劣的方法
  }
}
2.构造方法传参

构造方法初始化定义好的属性值与构造器类似,不同的是它是去构造一个方法,并且用实例去调用方法来实现传参对属性的初始化,这里我就详细去说明了,构造方法如下:

public void getScores(int studentScores){//构造一个有参的方法,接下来就是去调用该方法去初始化studentScores
this.studentScores=studentScores;
}
在构造方法中,我们常常会思考一个问题:一个方法可以同名吗?答案是可以的,这就涉及到了方法的重载,谈到方法的重载,我们可以先谈谈有参方法和无参方法。
  • 无参方法
public void study(){
}
  • 有参方法
public void study(int studytime){
}

如果在一个类中方法同名的话,如果它们是有参方法和无参方法,或者有参方法的参数不一样和参数的顺序不一样,这样的话,我们称其为方法的重载。
如下

public void study(){//无参方法
}
public void study(int studytime){//一个整型参数
}
public void study(Student st1){//一个对象作为参数
}
public void study(int studenttime,Student st1){//一个整型参数和一个类作为参数
}

4.接口用法

首先我们来明白一下接口的定义:
父类和子类比较,相对来说父类是一个比子类是一个更加抽象的类,这个抽象可以体现在两个方面:
  • 父类的方法和属性比子类要少
  • 在父类的方法,我们只能笼统地描述,而子类可以更加具体一些
    当父类非常抽象的时候,或者我们知道该类要干什么,但是具体怎么干我们只有针对具体的之类才知道如何去做,这样我们可以定义一个这样的类:该类中只有方法的定义,而没有方法体,并且当该类所有的方法都没有方法体,我们就称该父类为一个接口。
public interface Student(){
public void study();//只有方法的定义没有方法体
public void rest();
}

注意

  • 接口用interface来定义
  • 接口中的方法均为抽象的方法,所以接口是没有构造方法的,不能创建对象
  • 实现(继承)接口,用implement来实现
  • 实现一个接口,必须实现该接口的所有方法,不然程序会报错
//创建一个学生类,实现其接口
public class Studentone implement Student{
//实现学生学习的方法
public void study(){
System.out.println("我正在学习Java编程,天天搬砖很有乐趣啊!");
   }
//实现学生休息的方法
public void rest(){
System.out.println("我可以睡觉啦!先睡2个小时");
   }
}

接下我们就可以调用继承来的方法

public static void main(String[] args){
Student st1=new Studentone();//该学生类可以自动转型为父类
//调用重写父类中的方法
st1.study();
st1.rest();
}

注意:

  • 接口也是一种数据,它也适用于向上和向下转型
  • 接口的方法都是抽象的方法,接口不能实例化字段
说到接口和继承,我们还要一个类,它就是抽象类,它是接口和继承的一个过度态。
抽象类:
  • 在抽象类中,既可以定义自己方法,也可以定义抽象的方法
  • 继承抽象类的子类必须实现其抽象的方法
    -因为抽象类无法实例化,抽象类的方法必须被子类继承才能调用其方法
抽象类和接口的对比

在这里插入图片描述

接口的用法非常广泛,使用接口不仅可以反映Java的面向对象编程,体现代码的封装性,更能提高编程者的编程效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值