封装,继承,this,super,重写,关联,依赖,抽象abstract

封装

概念 : 将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问

封装的好处 :

  • 只能通过规定的方法访问
  • 隐藏类的实现细节
  • 方便加入控制语句
  • 方便修改实现
public class Demo{
    //属性用private权限
	private String name;   
    //方法用public权限
	public String getName (){ 
		return name;
	}    
    
	public void setName(String name){
	this.name = name;
    }
} 

this关键字

this关键字代表自身类的对象

​ 使用this关键字引用成员变量

​ 使用this关键字引用成员方法

PS : this关键系字必须放在非静态方法里面

在一个类的方法或构造方法内部,可以使用“this.成员变量名”这样的格式来引用成员变量名,常常用来区分同名的成员变量和局部变量。

public class Demo{
	private int a;
	//成员变量名与局部变量名相同		
	public Demo(int a){
	    this.a = a;
	}
	//用getter方法得到变量		
	public int getA(){
		return a;
	}
    //用setter方法设置变量
	public void setA(int a){
		this.a = a;
	}
}

继承

继承是面向对象程序设计不可缺少的设计思想,是实现代码可重用的根基,是提高代码可扩展性的主要途径.

继承是从已有的类中派生出新的类,新的类能吸收已有类的属性和行为,并能扩展新的能力.

  • 在java中使用extends关键字来表示继承关系
  • java不支持多继承,单继承使用java的继承关系很简单,一个类只能有一个直接的父类
  • 继承之后子类可以调用父类的所有非私有属性和非私有方法

继承与现实世界相类似,具体思想就是父类下分有具体的子类,在父类中存放子类共有的属性和方法.

继承是代码重用的一种方式

**继承的形式 **

[访问权限修饰符] [修饰符] 子类名 extends 父类名{子类体}

以一个动物类举例 :

//父类
public class Animal{
	public void eat(){}
}
//子类
public class Dog  extends Animal{
	public void play(){} 
}
/*子类对象可以直接调用父类的方法和属性

Dog类是 Animal类的子类, Animal类是Dog类的父类

Dog类是 Animal类的派生类, Animal类是Dog类的基类

继承的传递性 :

C类从B类继承,B类又从A类继承

那么C类就具有B类和A类的所有非私有属性和非私有方法

当一个没有继承任何一个类时, jvm 会默认让类继承Object类

Object是 java为所有类提供的基类

继承中的构造方法

子类构造方法总是先调用父类构造方法,默认情况下,调用父类无参构造方法

可以在子类构造方法的第一行,使用super关键字调用父类任意一个构造方法

如果用super,必须写在方法的第一句

如果子类的构造方法中没有显式地调用基类构造方法,则系统默认调用基类无参数的构造方法。

原因:子类创建后需要调用父类的方法,所以在创建子类对象时父类也需要同时被创建

//父类
public class Animal {
    private String name;
    private int age;

    public Animal() {
        System.out.println("Animal类中无参的构造方法");
    }
    public Animal(int age){
        System.out.println("有参的构造方法");
    }
}
//子类
public class Dog extends Animal {
    String name;
    private String type;

    public Dog() {
        //通过super关键字调用父类中有参的构造方法
        super(12);
    }
}

super关键字的用途

super关键字代表父类的引用,在程序中主要用途 :

  • 在子类构造方法中要调用父类的构造方法,需要注意:super语句只能出现在子类构造方法体的第一行。
  • 用"super.成员变量名"来引用父类成员变量
  • 用"super.方法名(参数列表)"的方式访问父类的方法。
  • 与this的区别,this通常指代当前对象,super通常指代父类。

方法的重写

在子类中可以根据需要对从基类中继承来的方法进行重写。

方法重写规则 :

  • 方法名相同、参数列表相同;
  • 返回值类型相同;
  • 访问权限等于或大于父类权限;

PS : 构造方法不能重写

应用场景 :

当父类的方法实现不能满足子类需求时,可以对方法进行重写( override)

//父类
public class Animal {

    public void eat(){
        System.out.println("啃骨头");
    }
}

//子类
 public class Dog extends Animal {
    /*
    父类中的实现方式不能满足子类需求时
    方法重写:当子类中的实现步骤与父类中的实现方式不同时,可以在子类中将父类中的方法重写,(覆盖)
    重写的要求:
    子类方法的结构与父类相同(完全相同,重载不算)
     */
    @Override
    public void eat() {
        System.out.println("吃肉");
    }
}
   

类之间的关系

关联关系

对象和对象之间的连接,在java中,关联关系的代码表现形式为一个类作为另一个类的属性类型存在.

关联关系分为单向关联双向关联

  • 单向关联: A类关联B类
  • 双向关联:A类关联B类,B类关联A类

**一对一关联:**一个学生,只能在一个班级里学习

//班级类
public class Classes{
    //Classes类关联student类. student类作为Classes类的属性
       private Student cla;//班级
     }
//学生类
public  class Student{
     }

**一对多关联:**一个学生,可以参加多个班级学习。

解决一对多的关联的方案

  • 集合
  • 数组

依赖关系

依赖关系:

指一个类A使用到了另一个类B

依赖关系的特性

这种关系是具有偶然性的、临时性的、非常弱的,但是类B的变化会影响到类A

依赖具体变现

在代码层面,依赖关系表现为类B作为参数被类A在某个method方法中使用

public  class Person {
    //在Person类中Bus类被作为参数使用
     public void travel(Bus bus){
     }
}

依赖于关联

是"HAS"关系,依赖关系是"USE"关系

A类关联B类,指的是B类对象作为A类的属性存在,称为“has”关系。

A类依赖B类,指的是B的对象作为A类的方法参数存在,称为“use”关系

抽象类

  • 如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
  • 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量、成员方法和构造方法。
  • 用abstract修饰的类就是抽象类。如果某个类中包含有抽象方法,那么该类就必须定义成抽象类。

特点 :

抽象类不能被实例化,但可以有构造函数,因为抽象类中含有无具体实现的方法,所以不能用抽象类创建对象

抽象类只能用作基类,表示的是一种继承关系。继承抽象类的非抽象类必须实现其中的所有抽象方法,而已实现方法的参数、返回值要和抽象类中的方法一样。否则,该类也必须声明为抽象类

抽象方法

抽象方法是一种特殊的方法:它只有声明,而没有具体的实现

抽象方法必须用abstract关键字进行修饰

/*
[访问权限修饰符] abstract class 类名{
    成员列表
}*/
//一个抽象类
public abstract class Shapes{
    //定义一个抽象方法,没有具体实现
    public abstract void draw();
}

public abstract class Shapes{
    //定义一个成员方法,具体实现
    public void draw(){
        //具体代码
    }
}

抽象类,抽象方法,在软件开发过程中都是设计层面的概念。也就是说,设计人员会设计出抽象类,抽象方法,程序员都是来继承这些抽象类并覆盖抽象方法,实现具体功能

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值