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#修饰符--类 ...
随机推荐
- xcode8 iOS函数返回值使用警告
没有使用返回值时, 警告 swift: @warn_unused_result func doSomething() -> Bool { return true } OC: - (BOOL)do ...
- win10 安装mysql
现在mysql压缩包:https://downloads.mysql.com/archives/community/ 在目录下新建data文件夹,my.ini文件,内容如下: [mysqld] bas ...
- 跨平台桌面程序框架Electron
https://www.npmjs.com/ js库
- codeforces R 493 div2
我蓝了!蓝了!!!蒟蒻的蓝色.日常点开friend发现竟然没几个人打??然后去div1看了一下果然学长全都去打div1了呜呜呜. 看到了久违的黄大仙,以为他今晚要上grandmaster,结果打完发现 ...
- 剑指offer——python【第53题】表示数值的字符串
题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数).例如,字符串"+100","5e2","-123","3.1 ...
- org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access denied for user 'root'@'localhost' (using password:
tationProcessor' to allow for resolving potential circular referencesDEBUG 2018-05-28 11:32:35,016 o ...
- 选择结构的三角关系Switch、Case、Default!!!
选择结构的三角关系Switch.Case.Default!!! 今天我们学习选择结构进化章节——Switch结构,他与if有什么区别呢? 相同点: 都是用来处理多分支条件的结构 不同点: switch ...
- RGBA与Opacity
rgba(r,g,b,a) 都与透明度有关,rgba不会影响文字,opacity则会.
- 项目实战:负载均衡集群企业级应用实战—LVS详解
目录 一.负载均衡集群介绍 二.lvs 的介绍 三.LVS负载均衡四种工作模式 1.NAT工作模式 2.DR工作模式 3.TUN工作模式 4.full-nat 工作模式 5.四者的区别 四.LVS i ...
- Django之Cookie、Session、CSRF、Admin
Django之Cookie.Session.CSRF.Admin Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...