三个关键词

本文详细探讨了Java中的多态实现方式——方法重载和方法重写,包括它们的区别。重载在编译时决定,而重写在运行时动态选择。此外,还介绍了Java的关键字用法,如`static`、`final`和`abstract`,以及对象创建过程和类型转换。`final`修饰的变量不可变,`abstract`用于定义抽象类和方法,不支持实例化。最后讨论了类的继承、封装和多态作为面向对象的特性。
摘要由CSDN通过智能技术生成

三个关键词

面试题:实现多态的方式有哪些?区别是什么?

有两种方式:方法重写 方法重载

区别:

方法重载:静态方式实现多态,在java编译时就已经确定了重载的方法,调用时根据参数决定调用哪个重载

方法重写:动态方式实现多态,在调用时,根据父类的引用指向那个子类对象,就用哪个子类的方法去覆盖掉那个父类中的方法

问题:子类和是覆盖掉父类中的方法?–在调用时

super和this不能同时出现在一个构造方法里

当出现this()时,会在this()里调用super()方法

类型转换

自动类型转换:级别低的自动转向级别高的

强制类型转换

向上类型转换:也称为装箱,自动完成,把子类转换为父类类型

向下类型转换:也称为拆箱,强制完成,把父类转换为子类类型

面向对象3大特征:封装、继承、多态

面向对象4大特征:抽象、封装、继承、多态

面向对象的设计思路:

  1. 抽象。发现类
  2. 发现类的属性
  3. 发现类的方法
  4. 优化:封装,继承,多态
关键字
abstract:抽象

【说明】抽象方法所在的类一定是抽象类,抽象类中不一定有抽象方法

​ 首相类不能被new,但有构造方法

​ 子类继承父类后,如果父类中有抽象方法,那么子类必须重写(实现)父类中的抽象方法

作用:1、无法确定方法体

​ 2、约束子类的作用,子类必须重写父类的抽象方法,除非子类也具有抽象性

【经验】:如果某个类不想被new,那么就可以声明为abstract类,统称为父类用作引用类型

stract:静态的

能修饰属性、方法、内部类、代码块

【说明】static修饰的成员在程序运行后,就自动加载到内存的方法区中,所以静态成员可以直接访问

​ 访问方式:类名.静态成员名

​ 当程序关闭后,方法区中的static成员才会消失

【经验】各个对象公共的属性、方法 才设置为static

非static修饰的成员,称为实例成员

静态成员和实例成员之间的互相访问

package com.qf.pro2103.day12.statics;

public class Teacher {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//在静态方法中可以直接访问静态成员
		Teacher.m1();
		//在同一类中,静态成员之间互相访问,可以不通过类名,建议通过类名访问
		m1();
		//在静态方法中不能直接调用实例成员
		//Teacher.m2();
		Teacher t=new Teacher();
		t.m2();
	}
	//静态方法
	public static void m1(){
		System.out.println("m1");
	}
	//实例成员,只有在new后才在堆空间中存在
	public void m2
		System.out.println("m2");
	}

}

在实例方法中,是否可以直接访问静态成员?—可以

{}括起来的代码称为动态代码块

执行顺序在属性初始赋值之后,构造方法之前被执行,作用给属性赋值指定初始值

JVM

编写.java文件 编译成.class文件 jvm运行.class文件

带有静态成员的对象的创建过程

1、父类的静态成员—属性

2、父类的静态成员—代码块

3、子类的静态成员—属性

4、子类的静态成员—代码块

----------------以上是静态,以下是实例的

5、父类的实例属性

6、父类的动态代码块

7、父类的构造方法

8、子类的实例属性

9、子类的动态代码块

10、子类的构造方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aoRpDJhQ-1628596585045)(C:\Users\ASUS\AppData\Roaming\Typora\typora-user-images\image-20210810195036731.png)]

final最终的

修饰3类成员

修饰属性:常量,值不能被更改

package com.qf.pro2103.day12.finals;

public class Student {
	//使用final修饰变量就是常量:不能通过代码改变其值
	//常量命名时都使用大写字母
	//【说明】属性常量在声明的同时必须赋值
	public final String SCHOOL_NAME="千锋大连";
	
	public void test1(){
		//SCHOOL_NAME="千锋";//不能改变常量的值
		final String CLASS_NAME;
		CLASS_NAME="java2103";//局部常量,先声明,然后赋值
		
		System.out.println(CLASS_NAME);
		//CLASS_NAME="JAVA2103"; //局部常量赋值后,就不能改变其值。
	}
}

修饰方法:最终方法,不能被子类重写

package com.qf.pro2103.day12.finals;

public class Animal {
	public final void say(){
		System.out.println("你瞅啥?");
	}
}
package com.qf.pro2103.day12.finals;

public class Dog extends Animal {
	public void say(){ //子类不能重写父类中final修饰的方法
		System.out.println("狗在巡视");
	}
}

修饰类:最终类,不能被继承

package com.qf.pro2103.day12.finals;

public final class Luozi {

}
package com.qf.pro2103.day12.finals;

public class XiaoLuozi extends Luozi {

}

终类,不能被继承

package com.qf.pro2103.day12.finals;

public final class Luozi {

}
package com.qf.pro2103.day12.finals;

public class XiaoLuozi extends Luozi {

}

String 就是final修饰的,不能有子类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值