一.面向对象

1.定义

(1)类:描述的是具有共性的一类事物

(2)对象:一个个具备了类的特点和功能的个体

(3)面向对象:要完成某件事,首先要先有对象,然后直接调用这个对象的响应功能

2.成员变量:写在方法之外的全局变量

public int publicField;         //公共,任何人都可以使用
private int privateField; //私有,一般指定给与子类使用
protected int protectedField; //受保护,一般指定给子类使用,只要是子类都能使用,不是子类同包下可以访问
int defaultField; //默认修饰符,只能同包下访问
public void hishigh(){
System.out.println(defaultField); //在方法里面引入成员变量
}

3.局部变量

public void he(String name){        //方法中引入可变的成员变量
System.out.println("他的名字叫"+name);
}
public void from(){
String palce="上海"; //局部变量
System.out.println(palce);
}

4.return:把结果返回給调用者

public String end(){    //使用void不能返回结果,使用数据类型可返回相应数据类型的结果
return "结果";
}

5.方法重载:方法名相同,传入的变量不同,构造方法也可以重载

public void student(){
System.out.println("男生一共有:"+boy); //boy用的是成员变量里的boy
}
public void student(int girl){
System.out.println("女生一共有:"+girl);
}

6.static

static int boy;
int girl;
String name;
public void studentname(){ //只能创建对象后调用方法
System.out.println("学生的名字:"+name); //使用的是全局变量
}
public static void student(){ //可直接调用方法,也可以创建对象调用方法
System.out.println("男学生一共"+boy); //使用的是全局变量,方法中加了static,因此在全局变量中也要加static。
}
public static void student(int girl){
System.out.println("女学生一共"+girl); //使用的是方法引入的局部变量,而不是全局变量
}
public static void main(String[] args){
Student mystudent=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
mystudent.studentname();
student();
mystudent.student();
}

7.get/set:私有全局变量可通过设置和获取来返回給全局变量

private int privateField;       //private私有,只能本类访问,要在对象中给成员变量赋值,可通过set:this.age=age,再用get获取成员变量的值
public void setPrivateField(int privateField) { //设置私有参数值,因为创建对象不能直接給私有变量赋值,需要用set方法赋值然后传递給私有变量
this.privateField = privateField;
}
public int getPrivateField() { //获取set方法设置的值返回结果給get方法,用get方法主要是在创建对象中需要用get+私有变量名替代私有变量名
return privateField;
}
public static void main(String[] args){
Animals animals=new Animals();
animals.setPrivateField(10); //设置set局部变量的值,当不符合条件是将值赋给成员变量
System.out.println(animals.getPrivateField()); //获取到了成员变量的值并返回给get,如果用void不能返回值,需要在对象中写私有成员变量,但是私有变量在本类以外不能访问
}

8.空参构造/有参构造/构造方法重载

构造方法,可以写可以不写,如果一个类没有写任何的构造方法,Java会提供一个没有参数的构造方法。如果写了构造方法,Java不再提供,构造方法可以为空参可以有参。在一个class中,构造方法可以重载

Student.class
public Student(){ //空参构造:写了构造方法,但是构造方法里没有参数
System.out.println("空参构造函数方法");
}
//构造方法可以重载。有参构造:里面的参数如果是用来定义成员变量的值,需要将有参构造的值赋给成员变量
public Student(int a,int boy){ //Java中查找变量有就近原则,先从方法内部找,再到类中找,所以如果局部变量和成员变量的变量名相同,用this区分。
girl=a; //成员变量名和局部变量名不同,成员变量可不加this。将构造方法中引入的变量值引入后赋给成员变量
this.boy=boy; //this关键字用来区分成员变量和局部变量,加this的变量是成员变量。查找的范围最小时的本类,this代表当前对象
}
public static void main(String[] args){
Student mystudent1=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
Student mystudent2=new Student(3,4); //构造方法可以重载
}

二.三大特性

1.封装

将代码通过函数的形式包装起来,然后直接调用

Student.class
public void studentgirl(){ //没有加static,只能通过创建对象来调用方法
System.out.println("女学生一共有:"+girl);
}
public static void studentage(int age){ //有static,可以创建对象调用或直接调用
System.out.println("学生的平均年龄:"+age);
}
public static void main(String[] args){ //创建对象可在同一个class下,也可以在新的class下创建
Student mystudent1=new Student(); //运行这一行结果是构造函数方法中的内容,new Student调用了类中的构造方法
Student mystudent2=new Student(3,4); //构造方法可以重载
System.out.println(mystudent1); //地址值
System.out.println(mystudent2); //对象的地址值,new+类相当于新创建了一个地址
mystudent2.studentgirl();
mystudent2.studentage(5); //通过创建对象调用static方法
studentage(5); //直接调用static方法
}

2.继承

(1)方法重写

public class IphoneTest extends Iphone{    //继承Iphone父类
@Override //注解一段功能,检查此方法是否为一个重写的方法
public void siri(){ //方法重写,siri是Iphone父类中的方法,在子类中重写
super.siri(); //super最小查找范围是父类,父类中的siri方法
call(); //父类中的方法
}

(2)子类特有的方法

看不到子类特有的方法,因为子类有很多个,如果要使用子类特有的方法,需要强制类型转换
public class StudentTest extends Student {
public void test(){
System.out.println("子类自己的方法");
}
public static void main(String[] args){
StudentTest st=new StudentTest();
StudentTest stest=(StudentTest) st; //向下强制转型,才可以使用子类特有的方法
stest.test5(); //向下强制转型后,使用子类特有的方法
}

(3)子类的方法构造

public InterageDomo(){
//super("scarlett"); //调用父类的构造,如果父类中有有参构造没有空参构造,就必须在括号里加参数,如果父类中只有空参构造,括号内为空
this("scarlett"); //如果本类中有构造函数,可以使用this调用本类的构造。super和this只能使用一个,并且是在构造的第一行。如果本类中没有构造函数,则不使用this
}
public InterageDomo(String name){ //本类的构造函数
this.name=name;
}

3.多态

(1)父类的类型接受子类的对象;(2)用多态创建只需一个父类变量就能接收所有子类对象

//Student为父类,StudentTest和InterageDomo为子类
Student st=new StudentTest(); //多态:父类的类型接受子类的对象,向上转型,用多态创建的优势:只需一个父类变量就能接收所有子类对象
System.out.println(st); //StudentTest子类对象的地址
st=new InterageDomo("scarlett"); //用多态创建的优势:只需一个父类变量就能接收所有子类对象
System.out.println(st); //InterageDomo子类对象的地址

Java编程之面向对象的更多相关文章

  1. Java编程基础-面向对象(中)

    本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...

  2. 黑马程序员:Java编程_面向对象

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 面向对象和面向过程都是一种思想,面向过程强调的是功能行为,面向对象是将功能封装进 ...

  3. Java编程基础-面向对象(下)

    一.抽象类 1.引入:当定义一个类时,常常需要定义一些方法来描述该类的行为特征,但有时这些方法的实现方式是无法确定的.Java允许在定义方法时不写方法体,不包含方法体的方法为抽象方法,抽象方法必须使用 ...

  4. Java编程基础-面向对象(上)

    一.面向对象的概念 1.概念:面向对象是把解决的问题按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题.当然,一个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能.这 ...

  5. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  6. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  7. 已看1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架、多线程(并发编程)、I/O(NIO)、Socket、JDBC、XML、反射等。[泛型]\

    1.熟练的使用Java语言进行面向对象程序设计,有良好的编程习惯,熟悉常用的Java API,包括集合框架.多线程(并发编程).I/O(NIO).Socket.JDBC.XML.反射等.[泛型]\1* ...

  8. Java学习day7面向对象编程1-对象和类

    一.Java编程中对象和类的概念 1,什么是类? 答:类是客观存在的,抽象的,概念的东西. 2,什么是对象? 答:对象是具体的,实际的,代表一个事物.例如:车是一个类,汽车,自行车就是他的对象. 关于 ...

  9. java编程思想之面向对象

    面向对象和面向过程 面向对象(Object Oriented),简称OO,是软件开发方法的一种,我们都知道java是基于面向对象开发的,但是说到面向对象,我们不得不提一提面向过程开发,面向过程,又称结 ...

  10. [Java编程思想-学习笔记]第1章 对象导论

    1.1  抽象过程 Java是一门面向对象的语言,它的一个优点在于只针对待解问题抽象,而不用为具体的计算机结构而烦心,这使得Java有完美的移植性,也即Java的口号"Write Once, ...

随机推荐

  1. LangChain基础篇 (02)

    LangChain 核心模块学习:Chains 对于简单的大模型应用,单独使用语言模型(LLMs)是可以的. 但更复杂的大模型应用需要将 LLMs 和 Chat Models 链接在一起. 要么彼此链 ...

  2. 项目中途引入Mybatis-plus后报错,报错Caused by: java.lang.ClassNotFoundException: org.mybatis.logging.LoggerFactory

    一.报错原因 mybatis-plus和pagehelper jar包冲突,注释mybatis-spring和pagehelper插件即可 <!-- SpringBoot集成mybatis框架 ...

  3. 【忍者算法】从拉链到链表:探索有序链表的合并之道|LeetCode 21 合并两个有序链表

    从拉链到链表:探索有序链表的合并之道 生活中的合并 想象你正在整理两叠按日期排好序的收据.最自然的方式就是:拿起两叠收据,每次比较最上面的日期,选择日期较早的那张放入新的一叠中.这个简单的日常操作,恰 ...

  4. c#securityexception不允许所请求的注册表访问权

    开机自启动程序如下: if (!System.IO.File.Exists(filename))                    throw new Exception("该文件不存在 ...

  5. QT5笔记: 23. 标准对话框

    文件对话框: QString fileName = QFileDialog::getOpenFileName(this, "打开一个文件", path, "文本(*.tx ...

  6. Python3环境,树莓派使用bluepy与BLE设备通信

    扫描设备 创建一个ScanDelegate 1 class ScanDelegate(DefaultDelegate): 2 def __init__(self): 3 DefaultDelegate ...

  7. Linux - 服务器磁盘 Raid & 分区 & 挂载

    一.流计算服务器 有一台流处理服务器(系统盘:2*600G.数据盘:6*600G)分区挂载如下: 设备名 分区 大小 挂载点 文件系统类型 磁盘用途 分区类别 /dev/sda /dev/sda1 3 ...

  8. Spark SQL (一)

    Spark SQL Spark与Hive的比较,Hive用一句话总结是,传入一条交互式sql在海量数据中查找结果,Spark可以将其结果转化成RDD来来进一步操作. 1.0以前: Shark 1.1. ...

  9. 001.GItLab介绍及云原生部署

    目录 gitlab介绍 gitlab cicd简介 gitlab特点 git主要目录 版本区别 gitlab部署 Omnibus 部署 部署需求 安装依赖 导入软件源 正式安装 准备证书 配置SSL及 ...

  10. 2024从国庆到CSP前总结

    前言 这是一篇迟来的总结,不过可能也不算太迟. 正文 截至起稿时间(2024.10.23),这个月已经讲了四次课,考了五场试.内容基本全是基于前一段时间的内容进行提升,对我而言很有帮助.我也意识到自己 ...