final修饰符与多态
知识点
一、final 最终的
可以修饰属性、方法、类
1、final修饰的属性,表示常量,初始化以后值不能改变。final修饰
引用数据类型的变量,引用地址不能改变。
2、final修饰类,不能被继承。比如:String
3、final修饰方法,不能被重写
public class FinalDemo {
public static final String NAME="张三";//静态常量
public static void main(String[] args) {
final int n=100;//常量
//n=200;//final修饰的常量,复值以后不能改变
final Object obj=new Object();//所有类的父类
// o=new Object();
}
public class Foo {
public final void function(){
System.out.println("方法被调用");
}
public class TestFoo extends Foo/*extends Stringextends Foo*/{
//经过final修饰的方法不能被重写也无法继承
/*@Override
public void function() {
}*/ public static void main(String[] args) {
Foo foo=new Foo();
foo.function();
}
二、多态
多态:同一个引用类型,使用不同的实例而执行不同操作 。
父类引用指向子类对象。
多态步骤:
使用多态实现思路
编写具有继承关系的父类和子类
子类重写父类方法
使用父类的引用指向子类的对象
多态语法:
向上转型
Pet pet = new Dog();
实现多态的两种形式:
使用父类作为方法形参实现多态
使用父类作为方法返回值实现多态
package day20190304; /**
* 狗类,继承Pet类
*
* @author Administrator
*
*/
public class Dog extends Pet {
private String strain; public Dog() {} public Dog(String name, int health, int love, String strain) {
super(name, health, love);
this.strain = strain;
} public String getStrain() {
return strain;
} public void setStrain(String strain) {
this.strain = strain;
} public String printInfo() {
return getName() + " " + getHealth() + " "
+ getLove() + " " + strain;
} @Override
public void eat() {
setHealth(this.getHealth()+3);
System.out.println("吃饱了,健康值增长为"+getHealth());
}
/**
* 狗接飞盘
*/
public void catchingFlyDisc(){
this.setLove(this.getLove()+5);
this.setHealth(this.getHealth()-10);
System.out.println("玩一会,健康值减少10,亲密度增加5");
}
}
package day20190304; /**
* 企鹅类,继承Pet类
*
* @author Administrator
*
*/
public class Penguin extends Pet {
private String sex; public Penguin() {
} public Penguin(String name, int health, int love, String sex) {
super(name, health, love);
this.sex = sex;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} @Override
public String printInfo() {
return getName()+" "+getHealth()+" "
+getLove()+" "+sex;
} @Override
public void eat() {
setHealth(this.getHealth()+5);
System.out.println("吃饱了,健康值增长为"+getHealth());
}
/**
* 企鹅游泳
*/
public void swimming(){
this.setLove(this.getLove()+5);
this.setHealth(this.getHealth()-10);
System.out.println("玩一会,健康值减少10,亲密度增加5");
}
}
package day20190304; /**
* 父类,宠物类
*
* @author Administrator
*抽象类
*/
public abstract class Pet {
private String name;
private int health;
private int love; protected Pet() {
} protected Pet(String name, int health, int love) {
this.name = name;
this.health = health;
this.love = love;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getHealth() {
return health;
} public void setHealth(int health) {
this.health = health;
} public int getLove() {
return love;
} public void setLove(int love) {
this.love = love;
}
/**
* 显示所有信息
* @return
*/
public abstract String printInfo();
/**
* 宠物吃东西
*/
public abstract void eat();
}
package day20190304; /**
* 主人类
*
* @author Administrator
*
*/
public class Master {
/**
* 给宠物喂食
*
* @param pet
*/
public void feed(Pet pet) {
pet.eat();
} /**
* 和宠物玩耍
*
* @param pet
*/
public void play(Pet pet) {
// System.out.println(pet instanceof Penguin);
if (pet instanceof Penguin) {//判读是否为企鹅类型
Penguin penguin = (Penguin) pet;
penguin.swimming();
} else if (pet instanceof Dog) {
// 将父类对象还原为子类对象,强制类型转换
Dog dog = (Dog) pet;
dog.catchingFlyDisc();// 调用狗自己的方法
}
} /*
* public Pet getPet(String petNo){ return new Dog(); }使用多态优化返回值类型
*/
}
package day20190304; public class TestPet { public static void main(String[] args) {
// 父类引用指向子类对象空间
// Pet pet=new Dog();
Dog dog = new Dog("来福", 80, 80, "田园犬");
Penguin penguin = new Penguin("球球", 80, 80, "Q仔");
// 主人对象
Master master = new Master();
master.play(dog);// 和宠物玩耍
master.play(penguin); master.feed(dog);// 给宠物喂食 // System.out.println(dog.printInfo()); } }
final修饰符与多态的更多相关文章
- final修饰符,多态,抽象类,接口
1:final关键字(掌握) (1)是最终的意思,可以修饰类,方法,变量. (2)特点: A:它修饰的类,不能被继承. B:它修饰的方法,不能被重写. ...
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...
- java中接口的概念及使用(补充final修饰符的使用)
接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...
- Java final 修饰符知识点总结
final从字面上理解含义为“最后的,最终的”.在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. fin ...
- Java中的final修饰符
1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...
- 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误
在Java中修饰符总共有一下几种: 1.访问控制修饰符 分别有:public private protected,缺省 2.其它修饰符 分别有:abstract,final,stati ...
- private static final 修饰符
java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...
- 类成员(static)和final修饰符
在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...
- C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态
C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal接口的成员默认访问修饰符是public C#修饰符--类 ...
随机推荐
- 将VSCode添加到右键
https://www.cnblogs.com/Rexcnblog/p/8046371.html https://www.jianshu.com/p/b49002fa10a7 @echo Off :S ...
- react useRef()函数
"ref"对象是一个通用容器,其current属性是可变的 保存dom function Test() { const t = useRef(null); useEffect(() ...
- meat标签
1.文档兼容模式的定义 Edge 模式告诉 IE 以最高级模式渲染文档,也就是任何 IE 版本都以当前版本所支持的最高级标准模式渲染,避免版本升级造成的影响.简单的说,就是什么版本 IE 就用什么版本 ...
- 1、js基础内容
js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...
- CString中 format、trimLeft和trimright、trim 和FindOneOf用法
1.format 可以帮助各种类型转换成CString. a. int 转 CString CString str; int number = 4; str.Format(_T("%d&qu ...
- php 字符串截取,支持中文和其他编码
function.php //使用方法 $content= mb_substr($content,0,25,'utf-8'); /** * 字符串截取,支持中文和其他编码 * @static * @a ...
- LINUXJI积算器bc
hling@hling:~$ bcbc 1.06.95Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundatio ...
- The way to unwind the stack on Linux EABI
I. probe the stack frame structure The original idea is to unwind the function call stack according ...
- JSON.parse()和JSON.stringify()的解析与用途
JSON.parse()和JSON.stringify()的解析与用途 1.parse用于从一个字符串中解析出json对象 如: var str = '{"name":" ...
- python扫描端口脚本
# -*- coding:utf8 -*- # # Python: 2.7.8 # Platform: Windows # Authro: wucl # Program: 端口扫描 # History ...