什么是面向对象?
对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
对象,就是对问题中的事物的抽象。
面向对象就是把现实中的事物都抽象为“对象”。每个对象是唯一的,且都可以拥有它的属性与行为。我们就可以通过调用这些对象的方法、属性去解决问题。
对象是由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)组成的封装体,描述客观事物的一个实体,是构成系统的基本单元。
类
类是对一组有相同数据和相同操作的对象的定义,是对象的模板,其包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其他类,形成类层次结构。
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
类是一组具有相同属性和行为的对象的抽象。
JAVA封装的意义:
一是把属性和方法(特征与功能)封装在一个类组件当中。
二是使用private(属性私有化)关键字来限制属性和方法的使用,public(属性共有化)
public:对外公开,访问级别最高
protected:只对同一个包中的类或者子类公开
默认:只对同一个包中的类公开
private:不对外公开,只能在对象内部访问,访问级别最低
创建一个学生类进行封装
public class fnegzhuang {
public class student {
private String name;//姓名
private int age;//年龄
private String sex;//性别
private int id;//学号
//Getter方法获取类中的属性
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSex() {
return sex;
}
// 学号只能为八位
public void getId(int id) {
String Id=id+"";//转换为字符串
if(Id.length()==8) {//判读Id的长度是否等于八
this.id=id;
}
}
//Setter方法设置类中的属性
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setNumber(int id) {
this.id = id;
}
//toString方法打印出类的属性
@Override
public String toString() {
return "student{" +
"name='" + name + '\'' +
", age=" + age +
", sex='" + sex + '\'' +
", id=" + id +
'}';
}
}
}
继承是面向对象三大特征之一,可以使得子类具有父类的属性和方法,同时还可以在子类中重新定义以及追加属性和方法。
让某个类型的对象获得另一个类型的对象的属性和方法。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为。
好处
1、提高代码的复用性
2、类与类之间产生了关系,是多态的前提
package com.company;
public class Main {
public static void main(String[] args) {
Cat c=new Cat();
Animal animal=new Animal();
System.out.println(c.age);
System.out.println(c.name);
c.eat();//打印Cat类的方法
//animal.jump();//会报错,因为父类不可以调用子类的私有方法
//注:子类不可调用父类的私有方法,不是因为没有继承,而是子类对父类的私有资源不可见
//System.out.println(c.Id);
}
}
class Animal {
String name;
Integer age;
private Integer ID;
public Animal() {//子类会默认使用父类的无参构造
System.out.println("我是父类");
}
public void eat() {//定义父类的方法
System.out.println("12");
}
}
class Cat extends Animal{//创建Animal的子类Cat
/*注意:子类会默认使用父类的无参构造*/
public void eat(){//子类可以重写父类的方法
System.out.println("123");
}
private void jump(){//定义子类的私有方法
System.out.println("坤");
}
}
多态是同一个行为具有多个不同表现形式或形态的能力。
多态就是同一个接口,使用不同的实例而执行不同操作
要实现多态,以下三大条件缺一不可:
什么是接口
1.接口是一种特殊的内部类,它里面的所有方法都没有实现。
接口的特点:
1.接口中成员默认访问修饰符都是public,即便你不写。
2.定义接口必须interface关键字完成
3.接口中可以定义变量,但是变量必须有固定的修饰符修饰,public static final 所以接口中的变量也称之为常量。
4. 接口中可以定义方法,方法也有固定的修饰符,public abstract
5. 接口中的成员都是公共的。
6. 接口不可以创建对象。
7. 子类必须覆盖掉接口中所有的抽象方法后,子类才可以实例化。否则子类是一个抽象类
8.接口最重要的体现:解决java单继承的弊端:类继承(继承基础功能)类同时实现接口(扩展功能);
接口多继承,多个接口之间可以使用extends进行继承;
3.接口语法的实现
先声明USB接口:其中规定了要实现USB接口就必须实现接口规定实现的read( )和write( )这两个方法
package test01;
public interface USB {
void read();
void write();
}
然后在写两个类,这两个类去实现USB接口。(实现其中的方法)
package test01;
public class Kingston implements USB{
@Override
public void read() {
System.out.println("金士顿正在通过USB功能读取数据");
}
@Override
public void write() {
System.out.println("金士顿正在通过USB功能写入数据");
}
}
package test01;
public class shanDiks implements USB{
@Override
public void read() {
System.out.println("闪迪正在通过USB功能读取数据");
}
@Override
public void write() {
System.out.println("闪迪正在通过USB功能写入数据");
}
}
运行一下
package test01;
public class test01 {
public static void main(String[] args) {
Kingston k=new Kingston();
k.read();
k.write();
ShanDiks s=new ShanDiks();
s.read();
s.write();
}
}