知识点
一、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修饰符与多态的更多相关文章

  1. final修饰符,多态,抽象类,接口

    1:final关键字(掌握)    (1)是最终的意思,可以修饰类,方法,变量.    (2)特点:        A:它修饰的类,不能被继承.        B:它修饰的方法,不能被重写.      ...

  2. JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配

    Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...

  3. java中接口的概念及使用(补充final修饰符的使用)

    接口 初期理解,可以是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示 class 用于定义类 interface 用于定义接口 接口定义时,格式特点: 1.接口中常见的 ...

  4. Java final 修饰符知识点总结

    final从字面上理解含义为“最后的,最终的”.在Java中也同样表示出此种含义. final可以用来修饰变量(包括类属性.对象属性.局部变量和形参).方法(包括类方法和对象方法)和类. 1. fin ...

  5. Java中的final修饰符

    1.什么时候可以选择final修饰符 如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰. 2.用final修饰的类 首先大家要明白,用final修饰的类是不能被继承的, ...

  6. 对于形式参数只能用final修饰符,其它任何修饰符都会引起编译器错误

    在Java中修饰符总共有一下几种: 1.访问控制修饰符    分别有:public private protected,缺省 2.其它修饰符      分别有:abstract,final,stati ...

  7. private static final 修饰符

    java修饰符分类修饰符字段修饰符方法修饰符根据功能同主要分下几种 1.权限访问修饰符 public,protected,default,private,四种级别修饰符都用来修饰类.方法和字段 包外 ...

  8. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  9. C#基础--类/接口/成员修饰符,多态、重载、重写,静态和非静态

    C#基础--类/接口/成员修饰符,多态.重载.重写,静态和非静态 类/接口/成员修饰符 C#修饰符---接口: 接口默认访问符是internal接口的成员默认访问修饰符是public C#修饰符--类 ...

随机推荐

  1. C# 如何通过mailto标签和SMTP协议两种方式发送邮件

    本文主要讲解如何通过如现mailto标签和SMTP协议两种方式发送邮件,下面就直入主题 方法一.通过mailto标签发送邮件 通过mailto不是正真意义上的发送邮件,它只是会自动调用我们本地默认的邮 ...

  2. css背景图撑开盒子高度

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. [原]CentOS7安装Rancher2.1并部署kubernetes (三)---解决登录kubernets超时和部署测试Pod和Containter[nginx为例]

    ##################    Rancher v2.1.7  +    Kubernetes 1.13.4  ################ ##################### ...

  4. shell 递归枚举文件并操作

    递归枚举文件并操作 #!/bin/bash CURDIR=$(cd $(dirname $0); pwd) export GOPATH=$CURDIR/.. echo GOPATH=$GOPATH c ...

  5. Python yield 函数功能

    python中有一个非常有用的语法叫做生成器,所利用到的关键字就是yield.有效利用生成器这个工具可以有效地节约系统资源,避免不必要的内存占用. 一段代码 def test_dict_sort(): ...

  6. python数据库操作

    python操作数据库应该比java更简单些,连接数据库需要有驱动,pcat就推荐自己遇到的3个模块:mysql.connector.sqlalchemy.MySQLdb

  7. Xshell正编辑文件时掉线,需再次正常编辑解决办法

    E325: ATTENTION Found a swap file by the name ".weather.py.swp" owned by: pi dated: Mon No ...

  8. ubuntu下安装php扩展

    参考原文地址:http://www.php.cn/php-weizijiaocheng-341528.html 发现在mac上好像不太行,然后按照下面的可以,写下来与大家分享 利用ubuntu的软件包 ...

  9. Java设计模式系列 — 构造器模式

    想象下你有一个类,像下图所示有许多属性.假设你想让你的类不可变(顺便说一下,除非有一个好的理由不这样做,否则你应该坚持.但是我们会以另一种方式来达到要求.) public class User { p ...

  10. easyui textbox 输入小写自动变大写,easyui textbox 绑定oninput事件 easyui textbox 绑定propertychange事件

    <input id="id" class="easyui-textbox" name="id" value="@Model. ...