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)- 面向对象解析的更多相关文章

  1. Java基础-初识面向对象编程(Object-Oriented-Programming)

    Java基础-初识面向对象编程(Object-Oriented-Programming) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Java是一门面向对象的程序设计语言.那么什 ...

  2. 黑马程序员——【Java基础】——面向对象(二)异常机制、包(Package)

    ---------- android培训.java培训.期待与您交流! ---------- 一.异常机制 (一)异常概述 1.异常:就是程序在运行时出现不正常情况. 2.异常类:程序在运行时,出现的 ...

  3. Java基础之面向对象以及其他概念

    一.基础知识:1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. JR ...

  4. java基础74 XML解析中的SAX解析相关知识点(网页知识)

    1.SAX解析工具 SAX解析工具:是Sun公司提供的,内置JDK中.org.xml.sax.*         点击查看: DOM解析相关知识:以及DOM和SAX解析的原理(区别) 2.SAX解析的 ...

  5. java基础6 面向对象的详解

    本文知识点(目录): 1.1.万物皆对象    1.2.面向对象的概述    1.3.面向对象(java语言)与面向过程(C语言)对比    1.4.面向过程    1.5.对象    1.6.面向对 ...

  6. 【Java基础】面向对象下

    面向对象下 这一章主要涉及其他关键字,包括 this.super.static.final.abstract.interface.package.import 等. static 在 Java 类中, ...

  7. 【Java基础】面向对象上

    面向对象上 这一章主要涉及 Java 类及类的成员,包括属性.方法.构造器:代码块.内部类. 面向过程与面向对象 面向过程(Procedure Oriented Programming,POP)与面向 ...

  8. 【java基础】面向对象的三大基本特征之-------继承

    面向对象的三大特征:封装,继承,多态 java通过extends关键字来实现继承,而且是单继承,一个子类只可以有一个直接父类,但是父类还可以有父类... java.long.Object是所有类的父类 ...

  9. 黑马程序员——【Java基础】——面向对象(一)概述、类与对象、继承、抽象类、接口、多态、内部类

    ---------- android培训.java培训.期待与您交流! ---------- 一.面向对象概述 1.面向对象:是一个很抽象的概念,它相对面向过程而言,是一种程序设计的思想. 2.面向对 ...

随机推荐

  1. Zookeeper ZAB 协议分析

    前言 ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播协议.在 ZooKeeper 中,主要依赖 ZAB 协议来实现分布式数据一致性,基于该协议,ZooKeep ...

  2. iOS自动打包并发布脚本

    假如你的项目目录如下所示: |____AOP | |____AppDelegate.h | |____AppDelegate.m | |____Base.lproj | | |____LaunchSc ...

  3. 在 eclipse 中将 web 项目部署到 tomcat 服务器上

    1.在 eclipse 中,选择 Window--->Preferences--->Server--->Runtime Environments,选择 Add 按钮 2.在弹出的对话 ...

  4. 第1 章MySQL 基本介绍

    第 1 章 MySQL 基本介绍   前言: 作为最为流行的开源数据库软件之一,MySQL 数据库软件已经是广为人知了.但是为了照顾对MySQL还不熟悉的读者,这章我们将对 MySQL 做一个简单的介 ...

  5. 1.Node.js 接入微信公众平台开发

    一.写在前面的话   Node.js是一个开放源代码.跨平台的JavaScript语言运行环境,采用Google开发的V8运行代码,使用事件驱动.非阻塞和异步输入输出模型等技术来提高性能,可优化应用程 ...

  6. springboot 集成shiro

    首先看下shiro configuration 的配置,重要部分用红色标出了 package cn.xiaojf.today.shiro.configuration; import at.pollux ...

  7. 前端教你学UI——人物处理(一)

    一.序言 本文作为本系列的第一篇写UI的文章,开头还是有必要申明一些东西的,本系列主要是为了作为博主在前端工作之余学习UI的一个记录,同时为了让更多的同行学习到一些编程之外的其他东西.所以本文会尽可能 ...

  8. Oracle listener服务启动后又停止的解决方案

    这是Oracle监听服务.忘了说我的版本是Oracle10g. 我装完Oracle数据库之后,然后用第三方工具plsql去连接,提示no listener,首先我反复检查tnsnames.ora配置文 ...

  9. 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】

     不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...

  10. 关于用css实现文本和图片垂直水平居中

    关于用css实现文本和图片垂直水平居中   一直相信好记性不如烂笔头,最近遇到很多用到垂直居中的,整理一下以便日后查阅. 一.文本垂直水平居中 1.水平居中: 文字水平居中没什么好说的,用text-a ...