1 继承(二)

  案例:Demo1

public class Demo1 {
public static void main(String[] args) {
Bmw bmw = new Bmw();
bmw.name = "宝马";
bmw.no = "555555";
bmw.type = "豪华版";
bmw.price = 200000.1;
bmw.color = "白色";
bmw.show();
bmw.start();
bmw.run();
bmw.stop();
}
}
class Car{//父类
//属性
String name;
String no;
int speed = 0;
String color;
//方法
void start(){
speed = 100;
System.out.println(name+"启动了");
}
void run(){
System.out.println(name+"在行驶,当前"+
"的速度是"+speed);
}
void stop(){
speed = 0;
System.out.println(name+"刹车了,当前"+
"的速度是"+speed);
}
}
//编写一个Car类(父类)
//属性:车名,车牌,速度(int speed=0),颜色
//方法:void start():启动,speed=100,输出启动了
//void run():行驶,输出车名以及当前的速度
//void stop():刹车,speed=0,输出车名以及当前速度
class Bmw extends Car{
//属性
double price;
String type;
//方法
void show(){
System.out.println(name+","+no+","
+speed+","+color+","+price
+","+type);
}
}

2 变量的隐藏(属性的覆盖)

  子类编写的属性的名字跟父类中继承过来的属性名一致,子类编写的属性会覆盖从父类中继承过来的属性。
  案例:Demo2

public class Demo2 {
public static void main(String[] args) {
Foo2 foo = new Foo2();
System.out.println(foo.name);
}
}
class Foo1{
String name = "卫青";
}
class Foo2 extends Foo1{
String name = "霍去病";
} public class Demo3 {
public static void main(String[] args) {
Eoo2 eoo = new Eoo2();
System.out.println(eoo.num1);//true
}
}
class Eoo1{
int num1 = 100;
}
class Eoo2 extends Eoo1{
boolean num1 = true;
//变量的隐藏只看子类和父类中的属性的名字是否一致,
//跟类型无关。
}

  变量的隐藏跟属性的类型无关,只要子类编写的属性的名字跟父类中继承过来的属性名一致,就覆盖了。

3 方法重写(方法覆盖)

  子类编写的方法覆盖了从父类中继承过来的方法。
  1) 方法重写要求子类编写的方法的名字和参数,必须跟要覆盖父类中的方法的名字和参数一致。
  2) 参数一致:参数的类型和个数一致,跟参数的名字无关。
    案例:Demo4

public class Demo4 {
public static void main(String[] args) {
Koo2 koo = new Koo2();
koo.f1();
}
}
class Koo1{
void f1(){
System.out.println("今天天气很好");
System.out.println("父类Koo1中编写的方法");
}
}
class Koo2 extends Koo1{
void f1(){
System.out.println("子类Koo2中重写" +
"父类Koo1中的方法f1()");
}
} public class Demo5 {
public static void main(String[] args) {
User1 user = new User1();
user.name = "张三";
user.age = 26;
user.job = "经理";
user.address = "北京";
user.email = "san@126.com";
user.salary = 30000.1;
user.show();
}
}
class Person1{//父类
//属性
String name;
int age;
String job;
double salary;
//方法
void show(){
System.out.println(name+","+age+","
+job+","+salary);
}
}
//设计一个Person1(父类)
//属性:姓名,年龄,职位,工资
//方法:void show():输出每一个属性的值
class User1 extends Person1{
//属性
String address;
String email;
//方法
void show(){
System.out.println(name+","+age+","
+job+","+salary+","+address
+","+email);
}
} public class Demo6 {
public static void main(String[] args) {
Zoo2 zoo = new Zoo2();
zoo.f1(100,200);
}
}
class Zoo1{
void f1(int a,int b){
int sum = a + b;
System.out.println("sum="+sum);
System.out.println("父类Koo1中的方法" +
"f1()");
}
}
class Zoo2 extends Zoo1{
void f1(int num1,int num2){
int result = num1 * num2;
System.out.println("result="+result);
System.out.println("子类Zoo2中的方法" +
"f1()重写父类Zoo1中的方法f1()");
}
}

  3) 方法重写跟方法重载的区别?
    a) 方法重写在子类和父类之间,子类编写的方法覆盖了从父类中继承过来的方法。方法重载在一个类的内部,方法名相同,参数不同的多个方法。
    b) 方法重写要求子类和父类中要重写方法的名字和参数一致。参数一致,参数的类型和个数一致,跟参数的名字无关。方法重载中要求重载的多个方法的名字一致,参数要不同,参数不同,参数的类型或者个数不同,跟参数的名字无关。
    c) 方法重写的目的,使用子类重新编写的方法来覆盖从父类中继承过来的方法。方法重载是把功能相似的方法起同一个名字,用户只需要记住一个名字,就可以调用多个方法,减少用户的记忆量,方便方法的使用。

4 继承中的构造方法

  子类可以继承父类的属性和方法,但是不能继承父类中的构造方法,可以在子类的构造方法中,调用父类中的构造方法。
  1)如果父类中没有空参(没有参数)构造方法,则子类必须在自己的构造方法的第1行,使用super(参数)来调用父类中的带参数的构造方法。
    super(参数):在子类构造方法的第1行使用,调用父类中带参数的构造方法。
    案例:Demo7

public class Demo7 {

}
class Noo1{
//属性
String name;
int age;
double salary;
//构造方法
Noo1(String name,int age,double salary){
this.name = name;
this.age = age;
this.salary = salary;
}
}
class Noo2 extends Noo1{
//属性
String address;
String phone;
//构造方法
Noo2(String name,int age,double salary,
String address,String phone){
//super(参数):在子类构造方法第1行使用,调用父类
//中带参数的构造方法
super(name,age,salary);
this.address = address;
this.phone = phone;
}
} public class Demo8 {
public static void main(String[] args) {
User2 user =
new User2("徐达",36,"将军",
"漠北",2000000.1,"da@126.com");
user.showAll();
}
}
class Person2{
//属性
String name;
int age;
String job;
String address;
//构造方法
Person2(String name,int age,String job,
String address){
this.name = name;
this.age = age;
this.job = job;
this.address = address;
}
//方法
void show(){
System.out.println(name+","+age+","
+job+","+address);
}
}
class User2 extends Person2{
//属性
double salary;
String email;
//构造方法
User2(String name,int age,String job,
String address,double salary,
String email){
super(name,age,job,address);
this.salary = salary;
this.email = email;
}
//方法
void showAll(){
this.show();
System.out.println("工资:"+salary);
System.out.println("邮箱:"+email);
}
}

  2)如果父类中含有空参的构造方法,则子类根据需要任何编写自己的构造方法,而不需要强制使用super(参数)来调用父类中的构造方法。
    案例:Demo9

public class Demo9 {

}
class Moo1{
//属性
String name;
int age;
String job;
String address;
//构造方法
Moo1(String name,int age,String job,
String address){
this.name = name;
this.age = age;
this.job = job;
this.address = address;
}
Moo1(){ }
}
class Moo2 extends Moo1{
//属性
String phone;
double comm;
//构造方法
Moo2(String name,int age,String job,
String address,String phone,
double comm){
/*
this.name = name;
this.age = age;
this.job = job;
this.address = address;
*/
super(name,age,job,address);
this.phone = phone;
this.comm = comm;
}
} public class Demo10 {
public static void main(String[] args) {
Midea midea =
new Midea("美的","壁挂式",
27,"黑色",5000.22);
midea.show();
midea.hot(3);
midea.cool(8);
}
}
class Kongtiao{
//属性
String name;
String type;
int degree;
String color;
//构造方法
Kongtiao(String name,String type,
int degree,String color){
this.name = name;
this.type = type;
this.degree = degree;
this.color = color;
}
Kongtiao(){ }
//方法
void show(){
System.out.println(name+","+type+","
+degree+","+color);
}
void hot(int degree){
this.degree = this.degree + degree;
System.out.println(name+"升高了"+degree
+"度以后,当前的温度是"+this.degree);
}
void cool(int degree){
this.degree = this.degree - degree;
System.out.println(name+"降低了"+degree
+"度以后,当前的温度是"+this.degree);
}
}
//设计一个Kongtiao类(父类)
//属性:名称,类型,温度(int degree),颜色
//构造方法:1)给每一个属性赋值 2)空参的构造方法
//方法:void show():输出名称,类型,温度,颜色
//void hot(int degree):升高degree度
//this.degree = this.degree+degree
//void cool(int degree):降低degree度
class Midea extends Kongtiao{
//属性
double price;
//构造方法
Midea(String name,String type,
int degree,String color,
double price){
super(name,type,degree,color);
this.price = price;
}
//方法
void show(){
System.out.println(name+","+type+","
+degree+","+color+","+price);
}
}

  3)在企业中,一般都建议在父类中编写一个空参的构造方法,方便子类构造方法的编写。
    案例:Demo11

public class Demo11 {
public static void main(String[] args) {
Worker worker =
new Worker("韦一笑",32,"侠客",
2000.1,"光明顶","xiao@126.com");
worker.show();
worker.showAll();
worker.showYearSal();
Manager manager =
new Manager("任我行",45,"教主",
2001.1,10000000.1,"1333333333");
manager.show();
manager.showYearSal();
}
}
class Emp{
//属性:姓名,年龄,职位,工资
String name;
int age;
String job;
double salary;
//构造方法
Emp(String name,int age,String job,
double salary){
this.name = name;
this.age = age;
this.job = job;
this.salary = salary;
}
Emp(){ }
//方法
void show(){
System.out.println(name+","+age+","
+job+","+salary);
}
void showYearSal(){
double result = salary * 12;
System.out.println(name+"的年薪是"+
result);
}
}
class Worker extends Emp{
//属性:姓名,年龄,职位,工资,地址,邮箱
String address;
String email;
//构造方法
Worker(String name,int age,String job,
double salary,String address,
String email){
super(name,age,job,salary);
this.address = address;
this.email = email;
}
//方法
void showAll(){
this.show();
System.out.println("地址:"+address);
System.out.println("邮箱:"+email);
}
}
class Manager extends Emp{
//属性:姓名,年龄,职位,工资,奖金,电话
double comm;
String phone;
//构造方法:
Manager(String name,int age,String job,
double salary,double comm,
String phone){
super(name,age,job,salary);
this.comm = comm;
this.phone = phone;
}//方法:
void show(){
System.out.println(name+","+age+","
+job+","+salary+","+comm+
","+phone);
}
void showYearSal(){
double result = salary*12+comm;
System.out.println(name+"年薪是"+result);
}
}

    综合案例:
      设计一个Emp类(父类)
      属性:姓名,年龄,职位,工资
      构造方法:1)给每一个属性赋值 2)空参的构造方法
      方法:void show():输出姓名,年龄,职位,工资
        void showYearSal(): 输出姓名和年薪(工资*12)
      编写一个Worker类(子类),继承Emp
      属性:姓名,年龄,职位,工资,地址,邮箱
      构造方法:给所有属性赋值
      方法:void showAll():输出每一个属性值
        void showYearSal():输出姓名和年薪(工资*12)
      编写一个Manager类(子类),继承Emp
      属性:姓名,年龄,职位,工资,奖金,电话
      构造方法:给每一个属性赋值
      方法:void show():输出每一个属性值
        void showYearSal():输出姓名和年薪(工资*12+奖金)
      在main中,分别创建Worker和Manager对象,调用其方法

5 访问控制修饰符(一)
  1)public:公共的,可以用来修饰类,属性,构造方法,以及方法,被public修饰类,属性,构造方法以及方法,可以任意进行访问。
    案例:Demo12

public class Demo12 {
public static void main(String[] args) {
Coo coo1 = new Coo();
System.out.println(coo1.name);
}
}
class Coo{
public String name = "张辽";
}

  2)private:私有,可以用来修饰属性,构造方法以及方法,被privae修饰属性,构造方法以及方法,只能在本类的内部访问,外界无法访问。
    案例:Demo13

public class Demo13 {
public static void main(String[] args) {
Yoo yoo = new Yoo();
System.out.println(yoo.name);
// System.out.println(yoo.age);
//被private修饰的属性,只能在本类的内部访问,外界
//无法访问
yoo.showAge();
}
}
class Yoo{
public String name = "张三";
private int age = 21;
public void showAge(){
System.out.println("age="+age);
}
}

Java语言基础(13)的更多相关文章

  1. 2018.6.13 Java语言基础复习总结

    Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计 ...

  2. Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)

    Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...

  3. Java语言基础(四)

    Java语言基础(四) 一.基本数据类型(8) byte  8位  使用较少,一般用于网络传输: -128-+127 short  16位 不常用 -32768-+32767 int  32位 常用  ...

  4. Java语言基础(二)

    Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...

  5. Java入门篇(二)——Java语言基础(下)

    上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...

  6. 【Java初探02】——Java语言基础

    本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...

  7. JAVA语言基础内部测试题(50道选择题)

    JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...

  8. day04<Java语言基础+>

    Java语言基础(循环结构概述和for语句的格式及其使用) Java语言基础(循环结构for语句的练习之获取数据) Java语言基础(循环结构for语句的练习之求和思想) Java语言基础(循环结构f ...

  9. day03<Java语言基础+>

    Java语言基础(逻辑运算符的基本用法) Java语言基础(逻辑运算符&&和&的区别) Java语言基础(位运算符的基本用法1) Java语言基础(位异或运算符的特点及面试题) ...

随机推荐

  1. vue计算属性VS侦听属性

    原文地址 Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性.当你有一些数据需要随着其它数据变动而变动时,你很容易滥用 watch——特别是如果你之前使用过 Angular ...

  2. 安装mistral

    1.安装mistral安装包 yum -y install openstack-mistral-api.noarch openstack-mistral-engine.noarch openstack ...

  3. Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown)

    Leetcode之动态规划(DP)专题-309. 最佳买卖股票时机含冷冻期(Best Time to Buy and Sell Stock with Cooldown) 股票问题: 121. 买卖股票 ...

  4. 【C/C++开发】__stdcall,__cdecl,__fastcall的区别

    __stdcall和__cdecl的区别 __stdcall和__cdecl是两种函数名字修饰.(注意是连续的两个下划线) Windows上 windows上不管是C还是C++,默认使用的都是__st ...

  5. PowerShell .Net整套环境搭建及部署系列

    此系列包含一套完整的集群部署,全是个人原创(除第一个是摘抄的),转载请注明出处 其中DFS部分在国内资料极少,且全是重复的,还是外面好些,有问题可以给出解决方案 若内容有不详之处或你也同样被DFS所困 ...

  6. openresty+lua+kafka方案与Tomcat接口并发度对比分析

    1.openresty+lua+kafka 1.1 openresty+lua+kafka方案 之前的项目基于nginx反向代理后转发到Tomcat的API接口进行业务处理,然后将json数据打入ka ...

  7. poj3162(树形dp+线段树求最大最小值)

    题目链接:https://vjudge.net/problem/POJ-3162 题意:给一棵树,求每个结点的树上最远距离,记为a[i],然后求最大区间[l,r]满足区间内的max(a[i])-min ...

  8. Min swaps to sort array

    Given an array with distinct numbers, return an integer indicating the minimum number of swap operat ...

  9. [转帖]差之毫厘谬之千里!带你认识CPU后缀含义

    差之毫厘谬之千里!带你认识CPU后缀含义 https://diy.pconline.com.cn/718/7189243_all.html 2015-11-16 00:15 出处:PConline原创 ...

  10. windows下将多个文件合并成一个文件,将ts文件变成MP3格式

    ①:先把全部的ts文件下载下来放到指定文件夹,这里我是放在桌面的ls里 ②:从cmd进去找到桌面的路径,也可以像我这样直接在桌面的路径上敲cmd进入: ③:直接合并使用命令“copy /b ls\*. ...