三大特性和修饰符


typora-root-url: 学习笔记img

Java三大特性

1.封装

概念:封装的概念就是把类的属性私有化,不能通过类名.的方式直接访问,但可以通过类中的公开方法get、set方法进行私有属性的调用

封装是怎么实现的呢?

  • ​ 需要修改属性的访问控制符(修改为private);
    ​ 创建getter/setter方法(用于属性的读写);
    ​ 在getter/setter方法中加入属性控制语句(用于判断属性值的合法性);

在这里插入图片描述

2.继承

继承的意思就是Animal(父类),一个大的笼统的类,其中包含了多个子类如:Dog、Pig、Bird…

这些子类都继承了父类Animal的属性和方法。

**注意:**Java中继承只能继承一个父类,但可以多级继承。如儿子(子类)继承了爸爸(父类),而爸爸又继承了爷爷(爸爸的父类),通过这种方式,儿子也有了爷的方法,但是儿子是不能继承父亲又继承爷爷的。

代码图实例如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gwx9UKo5-1616146828558)(学习笔记img/继承)]

从此处可见,子类并初始化定义方法,但是继承了来自父类的方法。所以把子类实例化之后,可以通过.的方式调用method(),最后结果显而易见了。

**注意:**父类的私有属性及构造方法是不能被子类继承的,但可以通过get/set方法对其进行访问调用

方法

访问修饰符:

在这里插入图片描述

方法重写与方法重载:

方法重写原则:

  • 方法名称、参数列表与父类相同。
  • 返回值类型必须与父类相同或其子类
  • 访问修饰符可与父类相同或是比父类更宽泛。

方法重写的执行:

  • 子类重写父类方法后,调用时优先执行子类重写后的方法。

  • 方法重写的特性:

    Ø 子类重写父类方法时子类方法会覆盖父类方法。

    Ø 子类重写父类方法,访问级别不能严于父类方法。

    Ø 子类重写方法名和类型与父类一样。

    父类的构造方法无法重写,只能被覆盖。

public class Demo2 {

}
class Son extends Father {
	int i=3;
	public void hello() {}
	public void hello(int i) {		//重载了初始的hello,方法名相同,参数列表不同。跟public void 这两东西没关系
		System.out.println("儿子直接被爸爸奖励了"+i+"个大嘴巴子");
	}
}

class Father extends GrandFather {
	@Override
	public void hello() { // 访问值类型相同,访问修饰符比子类更广,返回值若为Animal这种,则可以是其子类Dog、Cat啊这种
		System.out.println("父亲招呼我最爱的大嘴巴子");
	}
}

class GrandFather {
	public void hello() {
		System.out.println("爷直接打招呼");
	}
}	

3.多态

多态的概念就是通过父类对象指向子类的实例。其中只能调用父类中有的方法,子类重写了优先调用子类

package Note1;
//测试多态
public class DuoTai {

	public static void main(String[] args) {
		Animal an=new Dog();//此处表示把狗当动物来看了
		an.method();

	}

}
class Animal{
	public void method() {
		System.out.println("动物");
	}
}
class Dog extends Animal{
	public void method() {
		System.out.println("狗");
	}
}
//此处输出的为狗

三个关键字abstract/static/final

abstract:

abstract:抽象,如其名字,是个模糊的概念。在java中这个关键字表示为脑海里有这个概念,但实际上并不存在的东西,如动物、生活用品。。
因此我们在创建对象的时候,这种不存在的对象是不应当被创建出来的
	***abstract:一个不该被创建出来的东西,也无法实例化***
	**他可以被子类所继承,是一个依托于子类的东西**
package Note1;
public class Abstract {

	public static void main(String[] args) {
		Animal1 an=new Dog1();
		an.eat();
		an.run();
	}
}
abstract class Animal1{
	public abstract void eat();
	public abstract void run();
	/*
	 * 根据之前所学的,这里的eat和run方法是动物在跑,但实际上动物并不是一个具体实例
	 * 因此他的方法也是抽象的,若子类猫啊狗啊什么的实现则需要重写
	 */
}
class Dog1 extends Animal1{
	@Override
	public void eat() {
		// 重写Animal的eat方法
		System.out.println("狗吃骨头");
	}
	@Override
	public void run() {
		// 重写Animal的run方法
		System.out.println("狗子迈腿开跑");
	}	
}

static

概念:

  • 静态(static)可以修饰属性和方法。
  • 称为静态属性(类属性)、静态方法(类方法)。
  • 静态成员是全类所有对象共享的成员。
  • 在全类中只有一份,不因创建多个对象而产生多份。
  • 不必创建对象,可直接通过类名访问。

静态的特点

  • 静态方法允许直接访问静态成员。
  • 静态方法不能直接访问非静态成员。
  • 静态方法中不允许使用this或是super关键字。
  • 静态方法可以继承,不能重写、没有多态。

类加载

JVM首次使用某个类时,需通过CLASSPATH查找该类的.class文件。

  • 将.class文件中对类的描述信息加载到内存中,进行保存。
  • 如:包名、类名、父类、属性、方法、构造方法…
  • 加载时机:
    • 创建对象。
    • 创建子类对象。
    • 访问静态属性。
    • 调用静态方法。
    • 主动加载:Class.forName(“全限定名”);

final

  • final修饰类:此类不能被继承。

  • String、Math、System均为final修饰的类,不能被继承。

  • final修饰方法:此方法不能被覆盖。

  • 意为最终方法,不支持子类以覆盖的形式修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值