以下是本人的对类与对象、继承的一些理解,如有错误之处万望谅解,如有朋友愿意指正,十分乐意,万分感谢!
 
类与对象
 
 
类与对象是学习编程的基础(大概吧),那么何为类?何为对象呢?
 
一、简介
        何为类?说到类我想先说一下何为对象,在现实生活中,对象可以用来指代你的男/女朋友,按我的理解,我认为对象就是一个个具体的个体,比如一个学生,一个篮球,一个苹果都是一个个对象,
而类呢,就是对对象的抽象,就比如我们说的分而类之的感觉,比如在这里,球类是对篮球的一个抽象,篮球属于球类,而球类也可以产生一个篮球,再如学生类,学生类可以看作一个个学生的总体,在这
个总体里我们可以找出一个个学生,也就是具体到一个学生(个体),水果类同理。
 
二、类结构
 可以看作 类 = 属性 + 方法 ; 关键词 :calss
 public class 类名
                {      //属性
                       访问权限  变量类型  变量名
                     
                      //方法(行为)
                       访问权限   返回类型  方法名(参数类型1 参数1, 参数类型2 参数2.....){  方法体  };
                       /*参数可以无;
                         * 如果{}省略未写此方法为虚方法,即没有方法体*/
                 }
 三、访问权限

 

当前类中

同一个包下

子类中

其他

public

ok

ok

ok

ok

protected

ok

ok

ok

缺省(什么也不写)

ok

ok

private

ok

 

四、调用属性/方法 
        1、生成一个对象(关键词new)  格式:【类名 对象名 = new 类名; 】
        2、调用属性或者是调用方法    格式:【对象.属性名;   //   对象.方法名; 】

五、例子(学生类)

public class Student  {
//属性
public String name = "bcd";
public String sno; //方法是设置名字
public void setName(String name1)
{
name = name1;
}
//方法,此方法的作用为输出“xxx正在学习”
public void study()
{
// 方法体
System.out.println(name + "正在学习。");
}
//主方法
public static void main(String[] args){
//类实例化,生成一个对象学生
String name = "abc";
Student stu = new Student(); stu.setName(name);
stu.study(); Bread1 bread = new Bread1();
bread.type = "盼盼"; //引用属性的时候一定要给属性赋值
System.out.println(bread.type); }
} class Bread1 {
public String type = "盼盼";
public void eat() {
System.out.println("xxx正在吃" + type + "面包");
}
}
 三、注意事项
 对java来说:
               1、在一个java文件来说,可以写多个类,但是只能有一个public类,而且文件名要与public修饰的类名相同。
 
 
继承
 一、简介
 继承是一个类A拥有另一个类B的的所有属性和方法,同时它也可以有自己特有的(B没有的),简而言之,可以看作是对另一个类B的扩展。我们把A类叫做子类,B类叫做父类,子类继承父类即A类继承B类
  A类可以拥有B类的所有的属性和方法,但是某个属性或者某个方法是否能直接使用还要取决于该属性或者该方法的访问权限修饰符。
 二、结构 【 关键词(extends)】
               【格式:public class 子类名 extends 父类名 {} 】。在写子类的时候注意相同的属性或者方法是不需要再重新写一遍的,直接调用或者间接使用。可以添加新的属性或者方法。
 三、访问权限(这里和上面一样)

 

当前类中

同一个包下

子类中

其他

public

ok

ok

ok

ok

protected

ok

ok

ok

缺省(什么也不写)

ok

ok

private

ok

 

四、子类的实现
 1、产生一个子类对象。【子类名 对象名 = new 子类名; 】,此时父类、子类的方法均可以调用
 五、父类、子类的相互转型
 1、自动转型。子类对象可以自动转换成父类对象。【父类名 对象名 = new 子类名; 】此时的方法调用以子类为准,这个只要涉及同名方法时,调用的时子类的方法而不是父类的。这个主要是用在当需要传入不确定的子类对象
或者是父类对象时,可以将参数设为父类对象,而子类对象声明为父类。
 2、强制转型。父类A对象a强制转换成子类B对象b。【B b = (B) a;】
 六、方法的重写
 当父类的方法不能满足我们的需求时,我们可以对父类的方法进行重写,但是要注意两点:
 1、必须要有继承关系
 2、方法的声明,除了访问权限可以扩大,其他(返回值类型、方法名、参数)必须完全一样。
 七、例子:

场景:柯南 、 凶手 、黑衣人 PK
 柯南 和 凶手互相PK,采用回合制,每次攻击,让对方的血量减少攻击方的攻击值,重复,直到某一方的血量小于等于0,
获胜的一方继续和 黑衣人PK,黑衣人每次攻击让对方的血量减少自己的两倍攻击值,重复,直到某一方的血量小于等于0.
 输出:战斗过程,战斗结果。
 要求:每个类至多有一个攻击方法。
 
主类(柯南)
 package object;

 import java.util.*;

 public class Curnane {
public String name;
public int blood = 100;
protected int attack = 0; public void get(String name1,int bl,int ac)
{
name = name1;
blood = bl;
attack = ac;
} public int attack(Curnane c) {
if(c.blood > 0)
{
c.blood -= attack ;
System.out.println(name + "正在攻击" + c.name + " ; "+c.name+ "的血量减少: "+attack+ ". "
+ "此时双方的剩余血量分为: "+c.name +": "+ c.blood + ";"+ name + ": "+ blood); if(c.blood <= 0)
{
System.out.println();
System.out.println("Game over! "+name + " 胜利 !");
}
}
return c.blood;
}
}

两个子类

 package object;

 import java.util.*;

 public class Muederer extends Curnane{

 }

 package object;

 public class Black extends Curnane{

     public int attack(Curnane c) {
if(c.blood > 0)
{
int t = attack*2;
c.blood -= t ;
System.out.println(name + "正在攻击" + c.name + " ; "+c.name+ "的血量减少: "+ t + ". "
+ "此时双方的剩余血量分为: "+name +": "+ blood + "; "+ c.name + ": "+c.blood); if(c.blood <= 0)
{
System.out.println();
System.out.println("Game over! "+name + " 胜利 !");
} }
return c.blood;
} }

主方法

 package object;

 public class begin {
public void pk(Curnane c1, Curnane c2)
{
int blood1 = 0;
int blood2 = 0;
blood1 = c1.blood;
blood2 = c2.blood;
while(blood1 > 0 && blood2 > 0)
{
blood1 = c2.attack(c1);
if(blood1 <= 0 ) break; blood2 = c1.attack(c2);
if(blood2 <= 0 ) break;
} }
public static void main(String[] args) {
String cname = " 柯南 ";
String mname = " 凶手 ";
String bname = " 黑衣人 ";
int blood1 = 100; //柯南
int blood2 = 100; //凶手
int blood3 = 80; //黑衣人
int attack1 = 2;//柯南
int attack2 = 3;//凶手的攻击值
int attack3 = 4;//黑衣人的攻击值 begin b = new begin();
Curnane curnane = new Curnane();
Curnane muederer = new Muederer();
Black black = new Black(); Curnane winner = new Curnane(); curnane.get(cname,blood1,attack1);
muederer.get(mname, blood2,attack2);
black.get(bname, blood3, attack3); b.pk(curnane,muederer); if(blood1 > blood2) winner = curnane;
else winner = muederer; b.pk(winner,black);
} }

类与对象 && 继承的更多相关文章

  1. Java自学-类和对象 继承

    什么是 Java的 继承 ? 在LOL中,武器是物品的一种,也是有名称和价格的 所以在设计类的时候,可以让武器继承物品,从而继承名称和价格属性 步骤 1 : 物品类Item 物品类Item 有属性 n ...

  2. 2-初步了解C#-类与对象

    本篇博客对应视频讲解 回顾 我们在第一篇文章中讲了编程中最基本的内容,如输入输出.字符串处理.数字类型计算.分支及循环结构等.无论学习什么语言,这些内容都是相通的. 本篇博客主要演示列表(List)的 ...

  3. PHP -- 类和对象基础入门

         本文目录:    创建简单类和对象 继承 抽象类 接口 构造方法 析构函数     1. 创建简单类    创建一个People的类,在这里有四个要点说明一下: 第一个是在PHP中,访问属性 ...

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

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

  5. Python类,域,方法,对象,继承

    类和对象: 是面向对象编程的两个主要方面,类创建一个新类型,而对象这个类的实例.. 域: 属于一个对象或类的变量被称为域.域有两种类型: 属于每个实例(类的对象)或属于类本身.它们分别被称为实例变量和 ...

  6. 【Python】类和对象、继承、使用文件、存储、异常、标准库(不懂)

    当你调用这个对象的方法MyObject.method(arg1, arg2)的时候,这会由Python自动转为MyClass.method(MyObject, arg1, arg2)——这就是self ...

  7. python 零散记录(七)(下) 新式类 旧式类 多继承 mro 类属性 对象属性

    python新式类 旧式类: python2.2之前的类称为旧式类,之后的为新式类.在各自版本中默认声明的类就是各自的新式类或旧式类,但在2.2中声明新式类要手动标明: 这是旧式类为了声明为新式类的方 ...

  8. 类和对象:继承 - 零基础入门学习Python038

    类和对象:继承 让编程改变世界 Change the world by program 上节课的课后作业不知道大家完成的怎样?我们试图模拟一个场景,里边有一只乌龟和十条鱼,乌龟通过吃鱼来补充体力,当乌 ...

  9. Javascript学习6 - 类、对象、继承

    原文:Javascript学习6 - 类.对象.继承 Javasciprt并不像C++一样支持真正的类,也不是用class关键字来定义类.Javascript定义类也是使用function关键字来完成 ...

随机推荐

  1. Node.js_express_中间件 middleware_登录/注册实例源代码

    静态资源: 都写死了的资源,如 css,html 解析规则: 所有路由和中间件都在一个数组中,js 引擎会按照代码先后顺序添加路由和中间件 当请求发送到服务器时,服务器获取当前的请求信息(请求方式.请 ...

  2. php中的public、protected、private三种访问控制模式及self和parent的区别(转)

    php的public.protected.private三种访问控制模式的区别 public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用 ...

  3. 20 由属性查询学习到的ArcMap、javaScripts API相关操作

    因项目需要,想要在属性查询的时候连同相关的图片一并查出来,但是因为要查询的图层众多,且字段不固定,而且还要方便后期维护,因此一个个单独配置并不是最优的解决方法 为实现这个功能,我想到如下几种解决方法 ...

  4. java知识库

    完善自己的成长之路,建立一套属于自己的系统知识体系,温故而知新. --HBX 1.java特性 2.java程序设计环境 3.java基本的设计结构 4.类与对象 参考资料:<java核心技术( ...

  5. IOS不支持iframe的解决办法

    最近做ios的兼容,因为入口不同,需要把公共页面抽取出来,然后根据不同的值,传递给后台不同的入口.刚开始用iframe页面嵌套(第一次尝试使用),但发现iOS系统对iframe嵌套页面的高度和定位控制 ...

  6. js java 给定一个目标值,在一棵树中找是否有两个节点的值之和等于目标值

    在leetCode看到一题目 Given a Binary Search Tree and a target number, return true if there exist two elemen ...

  7. 使用openSSL开源工具进行SSL/TLS 安全测试

    本文介绍了使用半自动化工具执行SSL&TLS安全性评估的过程,以及如何使用手动及工具的测试方法验证并发现问题.目的是优化TLS和SSL安全测试流程,帮助信息安全顾问在渗透测试时在TLS / S ...

  8. Android的ViewPager的学习

    这篇博客是对慕课网上看到的视频里学习到的知识的一些记录,让自己能够加深理解.视频地址:http://www.imooc.com/learn/1116 在这个视频中,目标是实现类似微信的主界面之间的切换 ...

  9. git温习

    git init:将文件变成git仓库 ls -ah:查看隐藏目录 git add 文件1  文件2 ...:将文件添加到缓存区 git commit -m ‘提交说明’:提交到本地仓库一次  并说明 ...

  10. CF1139D Steps to One

    题目链接:洛谷 这个公式可真是个好东西.(哪位大佬知道它叫什么名字的?) 如果$X$恒$\geq 0$,那么 $$E[X]=\int_0^{+\infty}P(X>t)dt$$ 呸,我什么都没写 ...