Java基础(6)- 面向对象解析
java面向对象
对象
知识点
- java 的方法参数是按值调用,是参数的一份拷贝
- 封装
- 使用private将 属性值/方法 隐藏,外部只能调用 get,set方法/非private 的接口 获取
- 重载
- 方法调用时,同名函数 根据参数来自动选择(返回类型不是方法名的一部分)
- 不显式声明构造器 会提供默认的无参构造器
- 初始化数据方法
- 构造器赋值
- 声明中赋值
- 初始化块
- 初始化顺序
- 赋值 ->静态块->构造器
demo
public class Hero extends People{
//赋值语句先于构造器执行
private String skill = "none";
//静态 不可变 公用常量
public static final String FLY = "Hero can fly";
//类构造器
public Hero(String name, int age){
this.setName(name);;
this.setAge(age);
}
public Hero(String name, int age,String skill){
//调用另外一个构造器
this(name,age);
this.setSkill(skill);
}
//get 方法 不应该返回对象引用,会出现数据的封装性破坏,如需返回对象,则返回一个拷贝对象
//域访问器
public String getSkill() {
return skill;
}
//域更改器
public void setSkill(String skill) {
this.skill = skill;
}
public void changeValue(Hero h){
h.setName("change");
}
public static void main(String[] args) {
Hero h1 = new Hero("Saber",20);
Hero h2 = new Hero("Archer",20);
h1.changeValue(h2);
System.out.println(h2.getName());
}
}
抽象类
public abstract class FateHero extends Hero {
private String hope = "圣杯";
public FateHero(String name, int age) {
super(name, age);
}
public FateHero(String name, int age,String skill){
//调用另外一个构造器
super(name,age,skill);
}
public abstract void sayWantSomething();
public String getHope() {
return hope;
}
public void setHope(String hope) {
this.hope = hope;
}
}
继承
- 多态:
- 一个变量能指向多种实际类型
- 动态绑定:
- 在运行时能够自动选择调用哪个方法(父类的方法被子类覆盖时能正确运行子类的方法)
- 不允许继承 就可以用final 修饰class
//子类
public class Master extends People {
private Hero hero = null;
public Hero getHero() {
return hero;
}
public void setHero(Hero hero) {
this.hero = hero;
}
public static void main(String[] args) {
//继承了父类的方法和属性
Master m = new Master();
m.setAge(11);
m.setName("NoName");
}
}
//父类
public class People {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
接口
- 利用java的多态性,使用接口定义一个对象 可以便于更换实现类
封装实现类的方法
public interface IFight { public void fight(); public void runAway(); } public class FigthWithTest implements IFight{ private Hero hero = null; public FigthWithTest(Hero hero){ this.hero = hero; } @Override public void fight() { System.out.println(hero.getName() +"试探性的与敌方交手"); } @Override public void runAway() { System.out.println(hero.getName() +"立即撤退,没必要暴露太多能力"); } public Hero getHero() { return hero; } public void setHero(Hero hero) { this.hero = hero; } }
Java基础(6)- 面向对象解析的更多相关文章
- Java基础-初识面向对象编程(Object-Oriented-Programming)
Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...
- 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)
---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...
- Java基础之面向对象以及其他概念
一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JR ...
- java基础74 XML解析中的SAX解析相关知识点(网页知识)
1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.* 点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...
- java基础6 面向对象的详解
本文知识点(目录): 1.1.万物皆对象 1.2.面向对象的概述 1.3.面向对象(java语言)与面向过程(C语言)对比 1.4.面向过程 1.5.对象 1.6.面向对 ...
- 【Java基础】面向对象下
面向对象下 这一章主要涉及其他关键字,包括 this.super.static.final.abstract.interface.package.import 等. static 在 Java 类中, ...
- 【Java基础】面向对象上
面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...
- 【java基础】面向对象的三大基本特征之-------继承
面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...
- 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类
---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...
随机推荐
- Linux 通过端口转发来访问内网服务
Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具,系统内部服务受系统网服限制外部无法访问,需要通过rinetd映射将内网服务转发出来. 1. 下载解压 ...
- oracle数据库常用的99条查询语句(转载)
1. select * from emp; 2. select empno, ename, job from emp; 3. select empno 编号, ename 姓名, job 工作 fro ...
- JMeter-MyEclipse编译运行问题(Could not read JMeter properties file)
JMeter-MyEclipse编译运行问题按照 此贴 http://phoenix0529.iteye.com/blog/1530728 进行配置,然后用Ant编译Build.xml 是可以的. 但 ...
- 用c++实现高精度加法
c++实习高精度加法 最近遇到一个c++实现高精度加法的问题,高精度问题往往十复杂但发现其中的规律后发现并没有那么复杂,这里我实现了一个整数的高精度加法,主要需要注意以下几点: 1:将所需输入的数据以 ...
- javaScript-什么是变量?
什么是变量? 从字面上看,变量是可变的量:从编程角度讲,变量是用于存储某种/某些数值的存储器.我们可以把变量看做一个盒子,为了区分盒子,可以用BOX1,BOX2等名称代表不同盒子,BOX1就是盒子的名 ...
- Android学习笔记View的工作原理
自定义View,也可以称为自定义控件,通过自定义View可以使得控件实现各种定制的效果. 实现自定义View,需要掌握View的底层工作原理,比如View的测量过程.布局流程以及绘制流程,除此之外,还 ...
- typecho for SAE
url:http://cloudbbs.org/forum.php?mod=viewthread&tid=22817 typecho和wordpress差不多,目前使用的用户非常之多.这里分享 ...
- Spring学习(23)--- AOP之Introductions应用
简介允许一个切面声明一个实现指定接口的通知对象,并且提供了一个接口实现类来代表这些对象 由<aop:aspect>中的<aop:declare-parents>元素声明该元素用 ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)--S ...
- angular表单验证实例----可用的代码
前段时间,公司做一个单页面,就是一个表单验证,早开始在菜鸟教程上关注了angular,所以下派上用场了 angular里面对于表单验证,设置了很多指令. 也就是说不用自己写一些逻辑,直接绑定指令就行. ...