java面向对象编程-多态

news/2024/7/3 12:23:30 标签: 多态, java, java多态

一.多态

概念:多态是指,针对某个类型的方法调用,其真正执行的方法取决于运行时期实际类型的方法。
1.在继承关系中,子类如果定义了一个与父类方法签名完全相同的方法,被称为覆写(Override)[子类父类 方法名 返回值 参数都相同]
2.Override(覆写)和Overload(重载)不同的是,如果方法签名如果不同,就是Overload,Overload方法是一个新方法;如果方法签名相同,并且返回值也相同,就是Override。
3.方法名相同,方法参数相同,但方法返回值不同,也是不同的方法。在Java程序中,出现这种情况,编译器会报错。
加上@Override可以让编译器帮助检查是否进行了正确的覆写。希望进行覆写,但是不小心写错了方法签名,编译器会报错。

多态的条件:
    继承
    重写
    父类引用指向子类对象

例如:

java">class Person{
	public void run(){
		System.out.println("父类的run");
	}
}
class Student extends Person{
	public void run(){
		System.out.println("子类的run");
	}
}
----------------------------------------
Person p=new Student();
p.run();//发生多态
输出:
	子类的run

例子:计算薪资:

java">public class Hello{
	public static void main(String[] args){
		System.out.println("----Hello----");
		Incom[] incom=new Incom[]{new Teacher(10444),new Docx(22222)};
		double sum=getincom(incom);
		System.out.print(sum);
	};
	public static double getincom(Incom[] incom) {
		double sum=0;
		for(int i=0;i<incom.length;i++) {
			sum+=incom[i].getIncom();//调动发生多态
		}
		return sum;
	}
}
class Incom {
	protected double incom;
	public Incom(double _incom){
		this.incom=_incom;
	}
	public double getIncom(){
		return incom;
	}
}
class Teacher extends Incom {
	public Teacher(double _incom){
		super(_incom);
	}
	public double getIncom(){
		return incom*0.1;
	}
}
class Docx extends Incom {
	public Docx(double _incom) {
		super(_incom);
	}
	public double getIncom() {
		return incom*0.2;
	}
}

二.final

final修饰类,不可以被继承
final修改时变量,不可以被改变

继承可以允许子类覆写父类的方法。如果一个父类不允许子类对它的某个方法进行覆写,可以把该方法标记为final。用final修饰的方法不能被Override:

java">final class Person {
    protected String name;
}
// compile error: 不允许继承自Person
Student extends Person {
}

对于一个类的实例字段,同样可以用final修饰。用final修饰的字段在初始化后不能被修改。例如:

java">class Person {
    public final String name = "Unamed";
}

可以在构造函数中初始化final

java">class Person {
    public final String name;
    public Person(String name) {
        this.name = name;
    }
}
这种方法更为常用,因为可以保证实例一旦创建,其final字段就不可修改。

final修饰符有多种作用:

final修饰的方法可以阻止被覆写;

final修饰的class可以阻止被继承;

final修饰的field必须在创建对象时初始化,随后不可修改。

http://www.niftyadmin.cn/n/1035874.html

相关文章

不懂跟进,管理等于白做。

早上好&#xff0c;我是老原。 职场的运行&#xff0c;有些时候并非由明面的规则一一列举清楚的。 比如&#xff0c;一个项目经理是否足够靠谱&#xff0c;也不是“能力单一论”&#xff0c;更多是看他做事的习惯和思路&#xff0c;包括协作也包括进度管理。 有多少人暗地里…

java面向对象编程-抽象类

1.抽象类只能继承1个抽象类 2.抽象类内部可以有字段&#xff0c;内部可以定义抽象方法&#xff0c;也可以定义非抽象方法 3.继承抽象类必须实现抽象类的方法 4.抽象类不能被实例化 abstract class Person { //抽象类public abstract void run(); } class Child extends Per…

java面向对象编程-接口

一.概念 如果一个抽象类没有字段&#xff0c;所有方法全部都是抽象方法的话,则可以定义为&#xff1a;interface。 接口定义的所有方法默认都是public abstract的&#xff0c;所以这两个修饰符不需要写出来&#xff08;写不写效果都一样&#xff09;。 1个接口可以继承多个接…

环信--即时通讯平台

一、底层实现&#xff1a; Socket&#xff1a;套接字 网络上的两个程序通过一个双向的通信连接实现数据的交换&#xff0c;这个连接的一端称为一个scoket&#xff1b; 实际上是一条通信管道。 二、网络通信要素&#xff1a; 网络上的请求实际上就是&#xff1a;通过Socket…

java面向对象编程-静态字段和静态方法

静态字段 实例字段在每个实例中都有自己的一个独立“空间”&#xff0c;但是静态字段只有一个共享“空间”&#xff0c;所有实例都会共享该字段。举个例子&#xff1a; public class Hello{public static void main(String[] args){Person pnew Person("sikui",25);…

java面向对象编程-方法 构造方法 重载

在Java中&#xff0c;我们经常看到public、protected、private这些修饰符。在Java中&#xff0c;这些修饰符可以用来限定访问作用域&#xff0e; public 定义为public的class、interface可以被其他任何类访问 private 定义为private的field、method无法被其他类访问 protect…

iOS-CocoaPods的安装和使用

cocoaPods的作用 在开发iOS项目时&#xff0c;会常使用到第三方类库。   惯常做法是到GitHub上或其它网站下载一个一个的类库&#xff0c;然后导入到工程中&#xff0c;并且引入各种的类库&#xff0c;做各种的配置。有时候还要处理ARC与MRC的问题&#xff0c;很麻烦。  …

java核心类-String

String 在Java中&#xff0c;String是一个引用类型&#xff0c;它本身也是一个class,实际上字符串在String内部是通过一个char[]数组表示的,String太常用了. 常用&#xff1a; String str"hello world";字符串的比较&#xff1a;equal实现 不能使用&#xff1d;&…