* 生活中的多态:同一种物质,因环境不同而表现不同的形态。
* 程序中多态:同一个"接口",因不同的实现而执行不同的操作。
* 多态和方法的重写经常结合使用,子类重写父类的方法,将父类作为参数类型进行传入,执行时传入子类的实例,最终执行是子类重写后的方法。
* 多态优点: 提高了代码的扩展性和可维护性。

* 多态在java中实现的前提:

1.继承   2.方法的重写    3.父类引用指向子类
* 多态在java中实现的步骤。
* 1.建立继承关系
* 2.在编译时将父类作为形参(范围大一点,模糊一点)
* 3.在运行时将子类对象作为实参,执行的子类重写后的方法。

public class Dog extends Animal {
@Override
public void shout() {
System.out.println("汪汪汪~~~~~~~~~~~");
} }
public class Cat extends Animal {
@Override
public void shout() {
System.out.println("喵喵喵~~~~~~~~~~~");
}
}
public class Animal {
String name;
int age; public Animal(){ }
public Animal(String name,int age){
this.name=name;
this.age=age;
} public void shout(){
System.out.println("动物在叫.....");
} }
public class TestAnimal {
public static void testShout(Animal a) {
System.out.println("比赛开始....");
a.shout();
} public static void main(String[] args) {
Dog dog = new Dog();
testShout(dog);
Cat cat = new Cat();
testShout(cat);
testShout(new Duck());
}
}

* 类型转换
* 1.子类转换为父类--->自动转化 (向上转型),访问的是父类的属性,调用的是子类重写父类后的方法。
* a.子类向上转型成父类,上转型对象不能操作子类新增的成员变量和方法。
* b.上转型对象可以操作子类继承或重写的成员变量和方法
* c.如果子类重写了父类的某个方法,上转型对象调用该方法时,是调用的重写方法。
* 2.父类转换为子类:强制转换(向下转型)

public class TestAnimal {

    public static void testShout(Animal a) {
System.out.println("比赛开始....");
a.shout();
} public static void main(String[] args) {
// 子类自身new自身,可以调用父类中继承的方法,属性和子类特有的方法,属性
// Dog dog =new Dog();
// dog.color="黄色";
// dog.watchDoor();
// Animal animal = new Dog();//向上转型
// animal.color //无法访问子类特有属性
// animal.watchDoor()//无法访问子类特有的方法。
// 上转型对象可以操作子类继承或重写的成员变量和方法
// animal.name="大黄";
// animal.shout();//执行子类重写后的方法。 Animal a = new Dog();//向上转型
Dog d = (Dog)a;//向下转型
d.shout(); }
}

---------------------------------------------------------------分割线------------------------------------------------------------------------
public class Driver {
public void drive(Car c){
System.out.println("我是A照驾驶员,我要开车..");
c.run();
} public static void main(String[] args) {
Driver driver = new Driver();
driver.drive(new Benz());
driver.drive(new Bmw());
System.out.println("*********************");
//向上转型:
Car c = new Benz();
System.out.println(c.name);//访问是父类的属性
c.run();//调用子类重写后的方法 }
}

* final关键字
* 1.使用final修饰变量,该变量就变成常量,在运行的过程中无法重新赋值。
* 2.使用final修饰方法,该方法无法在子类中重写
* 3.使用final修饰的类,不能被继承(派生其他子类)
* JDK中常见的final修饰的类
* java.lang.Math
* java.lang.String

//public final class TestFinal {
public class TestFinal {
public void test(){
final int i=;
// i=20; //常量在运行的过程中无法重新赋值
}
public final void test2(){ }
} public class TestFinalSub extends TestFinal {
//使用final修饰的方法无法被子类重写
// public void test2(){
//
// }
}

*抽象方法: 使用abstract修饰的方法,抽象方法没有方法体.
*抽象类: 使用abstract修饰的类,抽象类中可以包含抽象方法。非抽象类不能包含抽象方法。
*包含抽象方法的类一定是抽象类, 抽象类中可以没有抽象方法。
*抽象类中可以包含构造方法,但是不能使用new关键字创建抽象类的对象.(抽象类不能new)
*Person p = new Person();//错误

public abstract class Person {
String name;
int age;
public Person(){ } public void intro(){
System.out.println("姓名:"+name);
System.out.println("年龄:"+age);
}
//吃的方法
public abstract void eating(); }
/**
* 子类继承了抽象类,就必须重写(实现)父类中抽象方法。
*
*/
public class Chinese extends Person {
public Chinese() {
}
public Chinese(String name,int age){
this.name=name;
this.age=age;
} // 重写父类中抽象方法
@Override
public void eating() {
System.out.println("我是中国人,我喜欢吃饺子!");
} }
public class American extends Person {
public American() {
} public American(String name,int age){
this.name=name;
this.age=age;
} @Override
public void eating() {
System.out.println("我是美国佬,我喜欢吃牛排!");
} public static void main(String[] args) {
Person p = new Chinese("小三",);
p.intro();
p.eating(); Person p2 = new American("rose",);
p2.intro();
p2.eating();
}
}

23种java设计模式之一工厂模式(GOF):(简单工厂模式)

简单工厂模式又叫静态工厂方法,可以通过其生成产品,可以降低因生成生成产品而导致的耦合性过强。(解耦合)

简单工厂模式(静态工厂方法):属于创建型模式,主要用生成"产品"。
* 工厂模式的命名:xxxFactory--->生成xxx
*需求:创建一个生成斧头的工厂,根据用户传入的参数生产相应斧头并返回
* 如果参数为steel--->生成SteelAxe的一个对象
* 如果参数为stone--->生成StoneAxe的一个对象
*如何实现工厂模式?
* 1.编写父类和子类或接口和实现类
* 2.编写静态的工厂方法,返回值类型为父类或接口。--->多态
* 3.根据用户的需求动态创建子类的实例,并返回。

public abstract class Axe {
public abstract void chop();
}
public class StoneAxe extends Axe {

    @Override
public void chop() {
System.out.println("我是石斧,砍日本人很钝!");
} }
public class SteelAxe extends Axe {

    @Override
public void chop() {
System.out.println("我是铁斧,砍日本人锋利!");
} }
  
public class AxeFactory {
/**
* 负责创建产品(斧头)
* @param ch
* @return
*/
public static Axe getInstance(String ch){
Axe axe=null;
if(ch.equals("steel")){
axe = new SteelAxe();
}else if(ch.equals("stone")){
axe = new StoneAxe();
}
return axe;
} public static void main(String[] args) {
Axe axe = AxeFactory.getInstance("steel");
axe.chop();
System.out.println("*********************");
Axe axe2 = AxeFactory.getInstance("stone");
axe2.chop(); } }

接口:

*java中定义接口使用的interface关键字
*java中的接口看作一种规范,接口中所有的方法都是抽象方法,接口中所有的变量都是常量
*接口中的方法默认的修饰符为 public abstract
* void fly()<===>public abstract void fly();
*接口中的成员变量默认修饰符为:public static final
* double PI=3.14;<====>public static final double PI=3.14;

public interface IFly {
//public static final double PI=3.14;
double PI=3.14;
//public abstract void fly();
void fly();
}
/**
* 一个类实现接口利用implements关键字,一旦实现了接口就必须重写接口中抽象方法。
* 修饰符 class 类名 implements 接口{
*
* }
*
*/
public class Superman implements IFly{
/**
* 重写(实现)了接口中抽象方法
*/
@Override
public void fly() {
System.out.println("我是超人,内裤外穿,举手就能飞......");
} }
public class Plane implements IFly{

    @Override
public void fly() {
System.out.println("我是飞机,我加油就能飞.....");
} }
public class Bird implements IFly {

    @Override
public void fly() {
System.out.println("我是一只小小鸟,我要展翅高翔.....");
} }
/**
* 利用接口,实现类,方法的重写完成多态
*/
public class Test {
public void testFly(IFly ifly){
ifly.fly();
} public static void main(String[] args) {
Test test = new Test();
test.testFly(new Plane());
test.testFly(new Superman());
test.testFly(new Bird()); }
}

java:面向对象(多态,final,抽象方法,(简单工厂模式即静态方法模式),接口)的更多相关文章

  1. Java设计模式(一) 简单工厂模式不简单

    摘要:本文介绍了简单工厂模式的概念,优缺点,实现方式,以及结合Annotation和反射的改良方案(让简单工厂模式不简单).同时介绍了简单工厂模式(未)遵循的OOP原则.最后给出了简单工厂模式在JDB ...

  2. Java面向对象多态

    Java面向对象多态 7.2对象 7.2.1创建对象 对象是类的实例 类的名称 对象名称 = new 类的名称(); 7.3继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域 ...

  3. Java设计模式(三)简单工厂模式

    定义与类型 定义:由一个工厂对象决定创建出哪一种产品类的实例 类型:创建型,但不属于GOF23种设计模式 适用场景 工厂类负责创建的对象比较少 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象 ...

  4. Java设计模式学习笔记(二) 简单工厂模式

    前言 本篇是设计模式学习笔记的其中一篇文章,如对其他模式有兴趣,可从该地址查找设计模式学习笔记汇总地址 正文开始... 1. 简介 简单工厂模式不属于GoF23中设计模式之一,但在软件开发中应用也较为 ...

  5. Java描述设计模式(02):简单工厂模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根 ...

  6. Java设计模式:Simple Factory(简单工厂)模式

    概念定义 简单工厂(Simple Factory)模式,又称静态工厂方法(Static Factory Method)模式,即定义一个工厂类,根据传入的不同参数创建不同的产品实例,这些实例对象具有共同 ...

  7. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  8. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  9. JAVA面向对象-----多态

    多态的概述 1:什么是多态 一个对象的多种状态 (老师)(员工)(儿子) 教师 a =老钟; 员工 b= 老钟; 2:多态体现 1:Father类 1:非静态成员变量x 2:静态成员变量y 3:非静态 ...

随机推荐

  1. emplace_back() 和 push_back 的区别

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  2. linux内核 进程调度

    概念: 进程调度决定那个进程投入运行,运行多长时间. 进程调度没有太复杂的原理,最大限度的利用处理器时间的原则是:只要有可执行的程序,那么总会有进程在执行,如果可运行的进程比处理器数目要多,那么注定要 ...

  3. TETP服务和PXE功能

    PXE PXE:Preboot Excution Environment, Intel公司研发,没有任何操作系统的主机,能够基于网络完成系统的安装工作.

  4. ogg中断处理

    ogg因为网络问题导致中断无法启动,需要重新抽取数据: --前滚抽取进程生成新的trail文件 alter extract ext147 etrollover alter ext147 extseqn ...

  5. Linux - TCP/IP网络协议基础

    1.0 Tcp / IP 背景介绍 上世纪70年代,随着计算机的发展,人们意识到如果想要发挥计算机的更大作用,就要讲世界各地的计算机连接起来. 但是简单的连接时不够的,因为计算机之间无法沟通.因此设计 ...

  6. Struts增删改查

    1.导入相关的pom依赖(struts.自定义标签库的依赖) <dependency> <groupId>jstl</groupId> <artifactId ...

  7. LOJ #2731 [JOI2016春季合宿]Solitaire (DP、组合计数)

    题目链接 https://loj.ac/problem/2731 题解 首先一个很自然的思路是,设\(dp[i][j]\)表示选了前\(i\)列,第\(2\)行第\(i\)列的格子是第\(j\)个被填 ...

  8. 背景(background)

    背景(background) 背景家族由5个主要的背景属性组成 background-color背景颜色 background-color:colorNome(取值 如:颜色名 red green. ...

  9. 关于web前端开发,区别用户使用的终端设备代码

    对web前端开发,熟知不同的浏览器,的解析是基本技能,下面,我就向大家展示一下,如何获得当前用户所用的终端设备.车子一发动,请准备上车................... <script> ...

  10. dom4j读写XML文档

    dom4j 最常用最简单的用法(转) 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:http:/ ...