首页 > 编程语言 >面向对象编程

面向对象编程

时间:2023-07-18 19:33:05浏览次数:34  
标签:Student void System 面向对象编程 println public out

面向对象编程

初识面向对象

面向过程思想

  • 步骤清晰简单,第一步做什么,第二步做什么...
  • 面向过程适合处理一些较为简单的问题

面向对象思想

  • 物以类聚,分类的思维模式,思考问题首先会解决问题需要哪些分类,然后对这些分类进行单独思考.最后,才对某个分类下的细节进行面向过程的思索
  • 面向对象适合处理复杂的问题,适合处理需要多人协作的问题

面向对象编程(Object-Oriented Programming,OOP)

本质:以类的方式组织代码,以对象的组织(封装)数据

从认识论角度考虑是先有对象后有类:

  • 对象,是具体的事物
  • 类,是抽象的,是对对象的抽象

从代码运行角度考虑是先有类后有对象:

  • 类是对象的模板

方法回顾和加深

方法的定义

修饰符 返回值类型 方法名(...){
	//方法体
    return 返回值;
}
    public String sayHello(){
        return "hello,world";
    }
    //return 结束方法,返回一个结果!
    public void print(){
        return;
    }
    public int max(int a,int b){
        return a>b ? a : b;
    }

方法的调用

静态方法和非静态方法

public class Student {
    //静态方法
//    public static void say(){
//        System.out.println("学生说话了!");
//    }
    //非静态方法
    public void say(){
        System.out.println("学生说话了!");
    }
}
public class Demo02 {
    //静态方法 static
//    public static void main(String[] args) {
//        Student.say();
//    }

    //非静态方法
    public static void main(String[] args) {
        //实例化这个类 new
        //对象类型 对象名 = 对象值;
        Student student = new Student();
        student.say();
    }
    //方法的调用
    //同是静态方法或非静态方法可以调用,若a为静态方法,b为非静态方法则不可调用
    //原因:a是类一起加载的,b在类实例化之后才存在
    public void a(){
        b();
    }
    public void b(){

    }
}

形参和实参

public class Demo03 {
    public static void main(String[] args) {
        //实参
        int add = Demo03.add(3,2);
        System.out.println(add);
    }
    //形参
    public static int add(int a,int b){
        return a+b;
    }
}

值传递和引用传递

//值传递
public class Demo04 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);
        Demo04.change(a);
        System.out.println(a);
    }
    //返回值为空
    public static void change(int a){
        a = 10;
    }
}
//引用传递:传递一个对象,本质还是值传递
public class Demo05 {
    public static void main(String[] args) {
        Person person = new Person();
        System.out.println(person.name);//null
        Demo05.change(person);
        System.out.println(person.name);
    }
    public static void change(Person person){
        person.name="gy";
    }
}

//定义了一个类,有一个属性name
class Person{
    String name;
}

对象的创建分析

类与对象的关系

类是一种抽象的数据类型,它是对某一类事物整体描述/定义,但是并不能代表某一个具体的事物

对象是抽象概念的具体实例

创建和初始化对象

使用new关键字创建对象

使用new关键字创建的时候,除了分配内存空间之外,还会给创建好的对象进行默认的初始化以及对类中构造器的调用

类中的构造器也称为构造方法,是在创建对象的时候必须要调用的,并且构造器有以下两个特点:

  1. 必须和类的名字相同
  2. 必须没有返回类型,也不能写void
//学生类
public class Student {
    //属性:字段
    String name;
    int age;

    //方法
    public void study(){
        System.out.println(this.name+"在学习");
    }
}
//一个项目应该只存在一个main方法
public class Application {
	public static void main(String[] args) {
        //类:抽象的,实例化
        //类实例化后会返回一个自己的对象
        //student对象就是一个Student类的具体实例
        Student student = new Student();
        student.name = "gy";
        student.age = 23;
        System.out.println(student.name);
        System.out.println(student.age);
    }
}

构造方法

public class Person {
    //一个类即使什么都不写,它也会存在一个方法
    //显示的定义构造器
    String name;
    //实例化初始值
    //1.使用new关键字,本质是在调用构造器
    //2.用来初始化值
    public Person(){
    }
    //有参构造:一旦定义了有参构造,无参就必须显示定义
    public Person(String name){
        this.name = name;
    }
    //alt+insert生成构造函数
}
//一个项目应该只存在一个main方法
public class Application {
    public static void main(String[] args) {
        Person person = new Person("gy");
        System.out.println(person.name);
    }
}

面向对象的三大特性

封装(数据的隐藏)

通常,应禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问,这称为信息隐藏

该露的露,该藏的藏:程序设计要追求"高内聚,低耦合"

高内聚就是类的内部数据操作细节自己完成,不允许外部干涉

低耦合就是仅暴露少量的方法给外部使用

属性私有,get/set

public class Student {
    private String name;
    private int age;
    private String sex;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age>0&&age<120){
            this.age = age;
        }else{
            this.age = 3;
        }
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
}

public class Application {
    public static void main(String[] args) {
        Student student01 = new Student();
        student01.setName("gy");
        System.out.println(student01.getName());
        student01.setAge(999);
        System.out.println(student01.getAge());
    }
}

继承

继承的本质是对某一批类的抽象,从而实现对现实世界更好的建模

extends的意思是"扩展".子类是父类的扩展

Java中类只有单继承,没有多继承

继承是类和类之间的一种关系.除此之外,类和类之间的关系还有依赖.组合.聚合等

继承关系的两个类,一个为子类(派生类),一个为父类(基类).子类继承父类,使用关键字extends来表示

子类和父类之间,从意义上讲应该具有"is a"的关系

//父类
public class Person {
    private int money;
    public void say(){
        System.out.println("说话");
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}
//子类
public class Student extends Person{

}
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.say();
        student.setMoney(10000);
        System.out.println("继承了"+student.getMoney());
    }
}

object类

在Java中,所有的类都默认直接或间接继承Object类

super

super注意点:
1.super调用父类的构造方法,,必须在构造方法的第一个
2.super必须只能出现在子类的方法和构造方法中
3.super和this不能同时调用构造方法
Vs this:
代表的对象不同:
this:本身调用者这个对象
super:代表父类对象的引用

前提:
this:没有继承也可以使用
super:只有在继承条件下才可以使用
构造方法:
this():本类的构造
super():父类的构造

//父类
public class Person {  
    protected String name = "gy111";

    public void print(){
        System.out.println("1111");
    }

    public Person() {
        System.out.println("Person无参构造执行了");
    }
}
//子类
public class Student extends Person{
    private String name = "gy222";

    public void test(String name){
        System.out.println(name);
        System.out.println(this.name);
        System.out.println(super.name);
    }

    public void print(){
        System.out.println("2222");
    }

    public void test1(){
        print();
        this.print();
        super.print();
    }

    //隐藏代码:调用了父类的无参构造
    //super();
    public Student(){
        System.out.println("Student无参构造执行了");
    }
}
public class Application {
    public static void main(String[] args) {
    	Student student = new Student();
        student.test("gy333");
        student.test1();
    }
}

方法重写

重写:需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大,但不能缩小 public>protected>default>private
抛出的异常:范围可以被缩小,但不能扩大

重写:子类的方法和父类必须一致,方法体不同

//重写都是方法的重写,和属性无关
public class B {
    public void test(){
        System.out.println("B>=test()");
    }
}
public class A extends B{
    //重写只和非静态方法有关
    @Override
    public void test(){
        System.out.println("A>=test()");
    }
}
public class ApplicationAB {
    public static void main(String[] args) {
        //方法的调用只和左边,定义的数据类型有关
        A a = new A();
        a.test();
        //父类的引用指向了子类
        B b = new A();
        b.test();
    }
}

多态

即同一方法可以根据发送对象的不同而采用多种不同的行为方式

一个对象的实际类型是确定的,但可以指向对象的引用的类型有很多

多态存在的条件:

  1. 有继承关系
  2. 子类重写父类方法
  3. 父类引用指向子类对象

注意:多态是方法的多态,属性没有多态性

public class Person {
    public void run(){
        System.out.println("run");
    }
}
public class Student extends Person{
    @Override
    public void run(){
        System.out.println("run son!");
    }
    
    public void eat(){
        System.out.println("eat");
    }
}
public class Application {
    public static void main(String[] args) {
        //一个对象的实际类型是确定的
        new Person();
        new Student();

        //可以指向的引用类型就不确定了:父类的引用指向子类
        Student s1 = new Student();
        //父类可以指向子类,但不能调用子类独有的方法
        Person s2 = new Student();
        Object s3 = new Student();
        s1.run();
        s1.eat();
        s2.run();//子类重写了父类的方法,执行子类的方法
    }
}

intansceof

instanceof是Java中的二元运算符,左边是对象,右边是类;当对象是右边类或子类所创建对象时,返回true;否则,返回false。

public class Person {

}
public class Student extends Person{

}
public class Teacher extends Person{

}
public class Application {
    public static void main(String[] args) {
    	Object object = new Student();
        System.out.println(object instanceof Student);//true
        System.out.println(object instanceof Person);//true
        System.out.println(object instanceof Object);//true
        System.out.println(object instanceof Teacher);//false
    }
}

类型转换

public class Application {
	public static void main(String[] args) {  
        //类型之间的转换:
        //高               低
        Person s1 = new Student();
        //student将这个对象转换为Student类型,就可以使用Student类型的方法了
        Student s2 = (Student) s1;
        s2.eat();

        //低                     高
        Student student = new Student();
        Person person = student;
    }
}

static关键字

//static
public class Student {
    //静态变量
    private static int age;
    //非静态变量
    private double score;
    //静态方法
    public static void run(){

    }
    //非静态方法
    public void go(){

    }

    public static void main(String[] args) {
        Student student1 = new Student();
        //非静态变量不能直接调用
        System.out.println(Student.age);
        System.out.println(student1.age);
        System.out.println(student1.score);
        Student.run();
        student1.go();

    }
}
public class Person {
    //2 作用:赋初值
    {
        System.out.println("匿名代码块");
    }

    //1.最早执行,只执行一次
    static {
        System.out.println("静态代码块");
    }

    //3
    public Person() {
        System.out.println("构造方法");
    }

    public static void main(String[] args) {
        Person person = new Person();
    }
}
//静态导入包
import static java.lang.Math.random;

public class Test {
    public static void main(String[] args) {
        //常规方式
        System.out.println(Math.random());
        //静态导入包后方式
        System.out.println(random());
    }
}

抽象类

abstract修饰符可以用来修饰方法也可以修饰类.如果修饰方法,那么该方法就是抽象方法;如果修饰类,那么该类就是抽象类

抽象类中可以没有抽象方法,但是有抽象方法的类一定要声明为抽象类

抽象类,不能使用new关键字来创建对象,它是用来让子类继承的

抽象方法,只有方法的声明,没有方法的实现,它是用来让子类实现的

子类继承抽象类,那么就必须要实现抽象类没有实现的抽象方法,否则该子类也要声明为抽象类

//抽象类
public abstract class Action {
    //抽象方法,只有方法名字,没有方法的实现
    public abstract void doSomething();

    /*
    特点:
    1.不能new这个抽象类,只能靠子类去实现它;约束
    2.抽象类中可以写普通的方法
    3.抽象方法必须存在抽象类中-
     */
}
public class A extends Action{
    @Override
    public void doSomething() {

    }
}

接口

接口:只有规范

作用:

  1. 约束
  2. 定义一些方法,让不同的人实现
  3. public abstract
  4. public static final
  5. 接口不能被实例化,接口中没有构造方法
  6. implements可以实现多个接口
  7. 必须要重写接口中的方法
//interface 定义的关键字
public interface UserService {
    //接口中的所有定义的方法其实都是抽象的
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}
public interface TimeService {
    void timer();
}
//抽象类:extends
//类 可以实现接口 implements接口
//实现了接口的类,就需要重写接口中的方法
//多继承
public class UserServiceImpl implements UserService,TimeService{
    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void timer() {

    }
}

标签:Student,void,System,面向对象编程,println,public,out
From: https://www.cnblogs.com/gy486926/p/17563936.html

相关文章

  • 面向对象编程(Object-Oriented Programming,OOP)
    面向对象编程(Object-OrientedProgramming,OOP)是一种编程思维方式和编码架构,是一种 对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。什么是对象:对象是客观存在的事物,可以说任何客观存在的都是可以成为对象,一台电脑,一直钢笔,一个人,一辆轿车等等,都可......
  • 面向对象编程Python:类、对象和继承
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种常用的编程范式,它将数据和操作数据的函数封装在一起,以创建对象。Python是一种支持面向对象编程的高级编程语言,它提供了类(class)、对象(object)和继承(inheritance)等概念,使得代码更加模块化、可维护性更高。本文将介绍Python中的......
  • 面向对象编程与面向过程编程的区别
    一、面向对象编程(OOP,ObjectOrientedProgramming):不必关心对象的具体实现,只需要能够满足用户的需求即可。主要以类或者对象为组织代码的基本单元。对象的三个主要的特性:1、对象的行为:可以对对象施加哪些操作,或者是对对象施加哪些方法。2、......
  • 十九、面向对象编程
    十九、面向对象编程类与对象类是总结事物特征的抽象概念,是创建对象的模板。对象是按照类来具体化的实物。类的构成类的名称:类名类的属性:一组参数数据类的方法:操作的方式或行为类的创建#classPeople(object):新式类classPeople():经典类classPeople(object):#类......
  • 类和面向对象编程
    一、两大范式支持面向对象的语言中,都有两大范式面向过程和面向对象1、面向过程:流程化、步骤化思维优点:复杂的问题简单化,进而流程化缺点:扩展性差,牵一发而动全身使用场景:对扩展性要求不高的地方,一般使用面向过程2、面向对象对象就是盛放数据"属性"和"方法"的结合体属性:简......
  • python入门(十):面向对象编程
    Python面向对象编程指南原文|大纲|首页在Python中,面向对象编程(Object-OrientedProgramming,简称OOP)是一种重要的编程范式。它允许我们通过创建对象、定义类和实现继承等概念来组织和管理代码。了解Python的面向对象编程对于编写可维护、可扩展和可重用的代码至关重要。......
  • [连载]JavaScript讲义(03)--- JavaScript面向对象编程
    ......
  • Python开发系列课程(9) - 面向对象编程基础
    面向对象编程基础活在当下的程序员应该都听过“面向对象编程”一词,也经常有人问能不能用一句话解释下什么是“面向对象编程”,我们先来看看比较正式的说法。把一组数据结构和处理它们的方法组成对象(object),把相同行为的对象归纳为类(class),通过类的封装(encapsulation)隐藏内部细节,通过继......
  • python3 面向对象编程--类的封装和继承
    #python3importrefromurllibimportrequestimportosclassPosterSpider(object):def__init__(self,path='./'):self.path=path#theentryofthisprocessdefgetStart(self,url):page=self.reqPage(url)......
  • Java面向对象编程的三大特性:封装、继承、多态。
    一、封装封装的核心在于私有化(private),大部分情况下,来封装对象的属性,很少有封装方法的。通过将对象的属性封装,提供对外的公共方法来访问属性是最常见的方式。publicstaticclassFengZhuang{//通过封装,设置私有属性privateStringname;privat......