Java基础笔记-抽象,继承,多态
抽象类: abstract修饰
抽象方法必须定义在抽象类中,抽象类不能创建对象.
在抽象方法中可以不定义抽象方法,作用是:让该类不能建立对象.
特点是:
1.定义在抽象类中
2.方法和类都用abstract修饰,在抽象类中的方法不写abstract也默认的是抽象方法.
3.不能用new来创建对象,调用抽象方法没意义.
4.抽象类中的方法被使用,必须由子类覆写其所有的抽象方法后,才能建立子类对象进行调用.
如果子类只覆盖了部分的抽象方法.那么该子类还是一个抽象类.
5.抽象类不可以被实例化.
继承:(extends)
关键字:extends,一般用于类与类之间的所属关系.java中是单继承,多实现(implements).
让类与类之间产生关系,从而才有了多态的特性.
当两个类有了继承关系以后.就可以在子类中调用父类的方法和属性,一般使用 super 关键字.
其用法和this关键字类似.super调用的是父类的,而this是调用的方法本身的.
abstract class Employee
{
private String name;
private String id;
private double pay;
//构造函数
Employee(String name,String id,double pay)
{
this.name = name;
this.id = id;
this.pay = pay;
}
public abstract void work(); //抽象类. } class NormalWorker extends Employee
{
NormalWorker(String name,String id,double pay)
{
super(name,id,pay);
} public void work()
{
System.out.println("NormalWorker Work");
} } class Manager extends Employee
{
private double bonus; Manager(String name,String id,double pay,double bonus)
{
super(name,id,pay);
this.bonus = bonus;
}
public void work()
{
System.out.println("Manager Work");
} }
class AbstractTest
{
public static void main(String args[])
{
Manager M = new Manager("lisi","0910",10000,5000);
M.work(); }
}
多态:
向上转型:将子类的对象转给父类的引用.
向下转向;将父类转换成子类类型.
一般使用的是向上转型,向下转型会出现不安全的问题,例如,猫是动物,但是我们不能说动物就是猫.
/*
多态:
人:男人,女人
动物:猫,狗
猫 m =new 猫();
动物 m = new 猫();
特点:提高代码的拓展.
*/
abstract class Animal
{
abstract void eat();
} class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
} class Dog extends Animal
{
public void eat()
{
System.out.println("啃骨头");
}
public void kanJia()
{
System.out.println("看家");
}
} class Pig extends Animal
{
public void eat()
{
System.out.println("饲料");
}
public void swim()
{
System.out.println("游泳");
}
} class DuoTaiDemo
{
public static void main(String args[])
{
/*
Cat c = new Cat();
c.eat();
Dog d = new Dog();
d.eat();
Pig p = new Pig();
p.eat();
*/
/*
function(new Cat());
function(new Dog());
function(new Pig());
*/
//Animal c = new Cat(); //向上转型
function(new Cat());
function(new Dog());
function(new Pig());
}
/*
public static void function(Cat c)
{
c.eat();
}
public static void function(Dog d)
{
d.eat();
}
public static void function(Pig p)
{
p.eat();
}
*/
public static void function(Animal a)
{
a.eat();
}
}
abstract class Animal
{
abstract void eat();
} class Cat extends Animal
{
public void eat()
{
System.out.println("吃鱼");
}
public void catchMouse()
{
System.out.println("抓老鼠");
}
} class Dog extends Animal
{
public void eat()
{
System.out.println("啃骨头");
}
public void kanJia()
{
System.out.println("看家");
}
} class Pig extends Animal
{
public void eat()
{
System.out.println("饲料");
}
public void swim()
{
System.out.println("游泳");
}
} class DuoTaiDemo2
{
public static void main(String args[])
{
/*
Animal a = new Cat(); //向上转型
a.eat();
Cat c = (Cat)a; //向下转型,将父类的引用转成子类类型.
c.catchMouse();
*/
function(new Cat());
function(new Dog());
function(new Pig());
} public static void function(Animal a)
{
a.eat();
if(a instanceof Cat)
{
Cat c = (Cat)a;
c.catchMouse();
}
else if(a instanceof Dog)
{
Dog d = (Dog)a;
d.kanJia();
}
else if(a instanceof Pig)
{
Pig p = (Pig)a;
p.swim();
} }
}
/*
练习:
基础班学生:学习,睡觉.
高级班学生:学习,睡觉.
*/
abstract class Student
{
public abstract void study();
public void sleep()
{
System.out.println("躺着睡.");
} } class DoStudent
{
public void doSomething(Student stu)
{
stu.study();
stu.sleep();
}
} class BaseStudent extends Student
{
public void study()
{
System.out.println("base study");
}
public void sleep()
{
System.out.println("站着睡");
}
} class AdvStudent extends Student
{
public void study()
{
System.out.println("adv study");
}
} class DuoTaiTest
{
public static void main(String args[])
{
/*
BaseStudent bs = new BaseStudent();
bs.study();
bs.sleep();
AdvStudent as = new AdvStudent();
as.study();
as.sleep();
*/
DoStudent ds = new DoStudent();
ds.doSomething(new BaseStudent());
ds.doSomething(new AdvStudent());
}
}
多态中成员的特点:
1.成员函数的特点; 在编译时,参阅引用型变量所属的类中是否有调用方法,有的话编译会通过,没有的话会编译失败
在运行时,参阅对象所属的类中属否有调用方法.
面试中可能遇见的问题.问调用显示结果.
成员函数(非静态的)在多态调用时,编译看左边,运行看右边.
静态函数,无论编译还是运行,都看左边
看了一下之前写的那篇笔记,感觉都没什么能写的了,不知道写些什么,越往后学感觉都是得理解的,越学越难的说,最近又没什么状态,只好慢慢来,慢慢学习了.
Java基础笔记-抽象,继承,多态的更多相关文章
- Java基础——面向对象(封装——继承——多态 )
		
对象 对象: 是类的实例(实现世界中 真 实存在的一切事物 可以称为对象) 类: 类是对象的抽象描述 步骤: 1.定义一个类 (用于 描述人:) ( * 人:有特征和行为) 2.根据类 创建对象 -- ...
 - Java基础语法<八>  继承 多态 抽象 反射
		
1.超类和子类 超类和子类 父类与子类 多态: 一个对象变量可以指示多种实际类型的现象称为多态 一个变量可以引用父类对象,也可以引用其子类对象,这就是多态. 不能将一个超类的引用赋给子类变量,因为调用 ...
 - Java基础笔记 – Annotation注解的介绍和使用 自定义注解
		
Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 | 被围观 25,969 views+ 1.Anno ...
 - 【转】Java基础笔记 – 枚举类型的使用介绍和静态导入--不错
		
原文网址:http://www.itzhai.com/java-based-notes-introduction-and-use-of-an-enumeration-type-static-impor ...
 - 第二十九节:Java基础知识-类,多态,Object,数组和字符串
		
前言 Java基础知识-类,多态,Object,数组和字符串,回顾,继承,类的多态性,多态,向上转型和向下转型,Object,数组,多维数组,字符串,字符串比较. 回顾 类的定义格式: [类的修饰符] ...
 - Java基础学习笔记七 Java基础语法之继承和抽象类
		
继承 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系. 例如公司中的研发部员工和维护部员工都属于员工, ...
 - 六、java基础-单例模式_继承_覆盖_多态
		
1.单例模式: 1)提出原因 是由gof 也就是四人组提出来的.为了保证jvm中某一类型的java对象永远只有一个,同时也是为了节省内存的开销.因为外面程序可以通过new的方法直接调用类里面的构造方法 ...
 - 黑马程序员----java基础笔记上(毕向东)
		
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 笔记一共记录了毕向东的java基础的25天课程,分上.中.下 本片为上篇,涵盖前10天课程 1. ...
 - Java基础笔记(一)
		
本文主要是我在看<疯狂Java讲义>时的读书笔记,阅读的比较仓促,就用 markdown 写了个概要. 第一章 Java概述 Java SE:(Java Platform, Standar ...
 
随机推荐
- WAMP环境搭建步骤
			
在d盘创建myServer文件夹 然后apache2.2 mysql php-5.3.5 1 安装apache2.2 2 安装php-5.3.5 3 apache与php环境的整合 1)在httpd ...
 - linux之SQL语句简明教程---AND OR
			
在上一页中,我们看到 WHERE 指令可以被用来由表格中有条件地选取资料. 这个条件可能是简单的 (像上一页的例子),也可能是复杂的.复杂条件是由二或多个简单条件透过 AND 或是 OR的连接而成.一 ...
 - linux之模拟简单登录的脚本
			
脚本如下: 运行结果:
 - 【HDU 4771 Stealing Harry Potter's Precious】BFS+状压
			
2013杭州区域赛现场赛二水... 类似“胜利大逃亡”的搜索问题,有若干个宝藏分布在不同位置,问从起点遍历过所有k个宝藏的最短时间. 思路就是,从起点出发,搜索到最近的一个宝藏,然后以这个位置为起点, ...
 - 1、什么是Lucene,Lucene能干什么
			
1.什么是lucene Lucene是一个全文搜索框架,而不是应用产品.因此它并不像http://www.baidu.com/ 或者google Desktop那么拿来就能用,它只是提供了一种工具让 ...
 - pl/sql查询中文乱码
			
1.设置系统环境变量 变量名:NLS_LANG 变量值:SIMPLIFIED CHINESE_CHINA.ZHS16GBK 2.修改注册表 regedit->hkey_local_machine ...
 - [置顶] viewPager控制滑动速度和时间
			
遇到如下问题:viewpager滑动时如果想跳过很多条直接到最后一条,中间会黑屏.黑屏是因为中间的view没有加载出来的缘故. stackOverflow上看到的解决方案,在这里记录一下, publi ...
 - android xUtils的使用
			
gethub地址:https://github.com/wyouflf/xUtils/ xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的ht ...
 - golang之pkg(包)
			
一.概述 Golang拥有超过100个标准包(可用go list std |wc -l查看) 任何包系统设计的目的都是简化大型程序的设计和维护工作,通过将一组相关的特性放进一个独立的模块以便于理解和更 ...
 - mvn profile 深层次目录打参数核心配置
			
<build> <resources> <resource> <directory>src/main/resources</directory&g ...