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#修饰符--类 ...
随机推荐
- linux安装jdk和tomcat命令
1.linux centos6.5 安装jdk1.在/usr/local/src目录下,创建java文件夹,拷贝jdk安装包到/usr/local/src/java下面:cd /usr/local/s ...
- thymeleaf(一)
(一)Thymeleaf 是个什么? 简单说, Thymeleaf 是一个跟 Velocity.FreeMarker 类似的模板引擎,它可以完全替代 JSP .相较与其他的模板引擎,它有如下 ...
- 面向对象编程之Java多态
我相信从学习计算机面向对象编程起就很多人背下了继承.封装.多态三个特性,可是多态并不是那么好理解的.通常做几道题,背下几次多态的动态绑定规律,可是依旧在一段时间后忘记了多态的存在,为什么要多态,这个程 ...
- SetWindowPos 和Z序
参考文档:http://www.cnblogs.com/findumars/p/3948315.html SetWindowPos(hWnd: HWND; {窗口句柄}hWndInsertAfter: ...
- 剑指offer——python【第36题】两个链表的第一个公共结点
题目描述 输入两个链表,找出它们的第一个公共结点 思路 注意,这里的公告结点的意思是相同的点,不仅值相同,next也相同,那么同理公共结点后面的点也是不仅值相同,而且next也相同,这样的话,就可以把 ...
- python中文分词库——pynlpir
安装 pip install pynlpir import pynlpir #加载包 pynlpir.open() #加载nlpir的库,这步是必须的 #否则会出现 段错误/段转储 segment f ...
- phjp(ajax)作用知识点
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...
- ASP返回JQuery EasyUI树形要求的JSON格式
根据http://blog.csdn.net/apollokk/article/details/41382479中提供的数据将结果格式化为JQuery EasyUI树形要求的JSON格式 <% ...
- python获取一年所有的日期
python获取一年所有的日期 自动识别闰年. import arrow def isLeapYear(years): ''' 通过判断闰年,获取年份years下一年的总天数 :param years ...
- Spark Streaming之窗口函数和状态转换函数
流处理主要有3种应用场景:无状态操作.window操作.状态操作. reduceByKeyAndWindow import kafka.serializer.StringDecoder import ...