华清远见-重庆中心-Java面向对象阶段技术总结

类和对象

类(class):具有相同属性和行为的独享的集合。

方法:描述对象的动作,在程序中,通过定义变量的像是表现属性

属性:描述对象的特征和行为

创建对象

类名 变量名=new 构造方法([参数])

//创建一个宠物对象
      Pet pet = new Pet();
      pet.nickName = nameList[j];
      pet.type = typeList[i];

创建对象时,用'. '操作符进行访问类中的非私有属性和方法


变量

1.成员变量:定义在类中,类的属性,有默认值,通过对象访问

2.局部变量:定义在方法中,没有默认值,只能在方法中赋值后能用

3.静态常量:特殊的成员变量,有默认值,通过类名访问

构造方法

public 类名称(参数类型 参数名称){
​ 方法体

}

    /*
     * 自动生成构造方法
     * 全参构造
     * 鼠标右键generate(或alt+insert) ==> constructor ==> 要生成的属性(全选)
     * 无参构造
     * 鼠标右键generate(或alt+insert) ==> constructor ==> select none
     * */
    public Student(int id, String name, String major) {
        this.id = id;
        this.name = name;
        this.major = major;
    }

    public Student() {
    }

面向对象三大特性

一丶封装

使用 private 关键字对属性进行修饰。再对外提供一组公开的 get/set 方法用于对该属性读取或赋值。 可以防止除自身类之外的地方对该属性就行访问。 这样做可以保护关键属性,隐藏类内部的实现细节,


步骤:

1、各类中的所有属性添加private访问修饰符
2、给每个属性添加getxxx()方法用于读取属性,添加setxxx()方法用于给属性赋值(快捷方法:按alt+inster ==>getter and setter)

    private int id;
    private String name;
    private String major;


   /*
     * 自动生成getter/setter
     * 鼠标右键generate(或alt+insert)  ==> getter and setter ==> 全选属性
     * */

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public String getMajor() {
        return major;
    }

    public void setMajor(String major) {
        this.major = major;
    }
}

3丶重点:创建对象后,无法通过.访问属性,只能通过get/set方法

public static void main(String[] args){
Student stu = new Student();
//stu.stuId=111;无法通过.赋值和读取
//只能通过set方法赋值
stu.setStuId(10026312);
//只能通过get方法获取私有属性的值
System.out.println(stu.getStuId());
}

二丶继承

类A可以通过extends关键字继承类B。
语法:class 类A extends 类B{}
类A称为子类、派生类、衍生类、subClass
类B称为父类、根类、超类、superClass
继承后,子类可以访问父类中非私有(没有被private修饰的内容)的属性和方法。
不同的子类中如果有相同的代码,都可以把它们提出来保存到父类中,从而减少子类中的代码冗余

继承的特点

1.子类对象可以直接访问父类中非私有(不用private修饰)的属性和方法
2.子类可以对父类中的方法进行扩展或覆盖,这称为方法重写。重写后,子类对象再调用该方法时,
3.执行的是重写后的内容
4.Java中是单继承。一个子类只能extends一个父类,一个父类可以有很多个子类
5.Java中可以多重继承。类A可以继承类B,类B可以继承类C,这时类A既是类B的子类,也可以称为类C的子类,可以访问类B与类C中非私有的成员
6.任何类都是Object类的子类
7.在创建子类对象时,会先执行父类中相应的构造方法

//父类
public class Father{
  public Father(){
    fun();
  }
public void fun(){
  System.out.println("父类中的普通方法");
    }
}

//子类继承自父类
public class Son extends Father{
  public Son(){
    fun();
   }
  public void fun(){
    System.out.println("子类中的普通方法");
    }
}

方法重写Override(快捷键ALT+O)

当子类继承父类后,可以对父类中的非私有的方法进行扩展或覆盖,这个过程称为重写。

要求:方法名、参数列表、返回值必须和父类一致;访问权限不能比父类更严格;不能抛出比父类更大的异常。

方法重载overload

在一个类中,多个方法的方法名相同,参数列表不同时,这些就是重载的方法。即同名不同参

要求:方法名相同;参数列表(类型和数量)不同;与返回值无关。

thissuper关键字

这两个关键字,都可以当做对象使用,也可以当做构造方法使用。

当对象使用:"this.属性"或"this.方法"或"super.属性"或"super.方法"。此时的this或super表示“当前类”或“父类对象”

public calss Person{
     private String name;
     public void setName(String name){
        this.name=name;//这个this表示当前类Person的对象
}

当构造方法用:"this([参数])或super([参数])"。此时的 this([ 参数 ]) 或 super([ 参数 ]) 表示当前类或当前类的父类的某个构造方法。


public class Person(){
private String name;
private int age;
public Person(){
//这句话表示调用Person(String name,int age)构造方法,只能放在第一行
this("小明",20);
}
public Person(String name,int age){
this.name=name;
this.age=age;
}

Object类

它是所有类的父类,任何类都可以间接地继承了该类,但没有明确的在extends中体现出来。所有类都可以访问Object类中的方法,或对其进行重写。

向上转型

Person p = new Person();
Object obj=p;

向下转型

Animal an = new Animal();
Cat c=(Cat)an;

三丶多态

多态就是子类的对象指向父类的引用 ( 子类对象使用父类变量接收,即向上转型 ) 。

父类 变量 = new 子类 ();

public class Father{
}
public class Son extends Father{
}
public class Main{
public static void main(String[] args){
Son son = new Son();
//这就是多态的体现
//子类的对象,可以使用父类的变量保存
Father father = new Son();
}
}

抽象类(abstract)

修饰方法:  访问修饰符 abstract 返回值类型 方法名(参数类型 形参名称);

//当一个类中有抽象方法时,该类也需要是一个抽象类
public abstract class Game{
//这就是一个抽象方法,没有方法体
public abstract void startGame(Player player);
}

特点

修饰类:被修饰的类称为抽象类

 1、抽象类不能被实例化,无法创建对象。
 2、抽象类中有构造方法,在创建其子类对象时,自动调用执行。
 3、抽象类中可以有抽象方法,也可以有非抽象方法。
 4、抽象类的子类要么继续成为抽象类,要么重写抽象父类中的所有抽象方法。

修饰方法:被修饰的方法称为抽象方法

 1、抽象方法没有方法体。
 2、抽象方法只能出现在抽象类或接口中。
 3、abstract 不能修饰构造方法和静态方法。

接口 (Interface)

        接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合,接口通常以interface来声明。一个类通过继承接口的方式,从而来继承接口的抽象方法。接口并不是类,编写接口的方式和类很相似,但是它们属于不同的概念。类描述对象的属性和方法,接口则包含类要实现的方法。除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。 接口无法被实例化,但是可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。另外,在 Java 中,接口类型可用来声明一个变量,他们可以成为一个空指针,或是被绑定在一个以此接口实现的对象。

与类的区别

1、接口不能用于实例化对象。
2、接口没有构造方法。
3、接口中所有的方法必须是抽象方法,Java 8 之后 接口中可以使用 default 关键字修饰的非抽象方法。
4、接口不能包含成员变量,除了 static 和 final 变量。
5、接口不是被类继承了,而是要被类实现。
6、接口支持多继承。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值