Java语言基础(13)
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)的更多相关文章
- 2018.6.13 Java语言基础复习总结
Java语言基础与面向对象编程实践 第一章 初识Java 1.1机器语言 机器语言是指一台计算机全部的指令集合.机器语言室友0和1组成的二进制数,是一串串由0和1组成的指令序列,可将这些指令序列交给计 ...
- Java之--Java语言基础组成(关键字、标识符、注释、常量和变量、运算符)
Java语言基础组成-关键字.标识符.注释.常量和变量.运算符 Java语言由8个模块构成,分别为:1.关键字:2.标识符(包名.类名.接口名.常量名.变量名等):3.注释:4.常量和变量:5.运算符 ...
- Java语言基础(四)
Java语言基础(四) 一.基本数据类型(8) byte 8位 使用较少,一般用于网络传输: -128-+127 short 16位 不常用 -32768-+32767 int 32位 常用 ...
- Java语言基础(二)
Java语言基础(二) 一.变量续 (1).变量有明确的类型 (2).变量必须有声明,初始化以后才能使用 (3).变量有作用域,离开作用域后自动回收 变量作用域在块内有效 (4).在同一定义域中变量不 ...
- Java入门篇(二)——Java语言基础(下)
上篇说到Java中的变量与常量,接下来就是简单的计算了,首先需要了解一下Java中的运算符. 六.运算符 1. 赋值运算符 赋值运算符即"=",是一个二元运算符(即对两个操作数进行 ...
- 【Java初探02】——Java语言基础
本篇博文就Java语言的一些基本元素进行一些记录和阐述,主要讲解一下Java语言的一些基本构成元素和Java的主类结构. Java语言基础的大致组成 java主类结构 基本的数据类型 变量与常量 运算 ...
- JAVA语言基础内部测试题(50道选择题)
JAVA语言基础内部测试题 选择题(针对以下题目,请选择最符合题目要求的答案,针对每一道题目,所有答案都选对,则该题得分,所选答案错误或不能选出所有答案,则该题不得分.)(每题2分) 没有注明选择几项 ...
- day04<Java语言基础+>
Java语言基础(循环结构概述和for语句的格式及其使用) Java语言基础(循环结构for语句的练习之获取数据) Java语言基础(循环结构for语句的练习之求和思想) Java语言基础(循环结构f ...
- day03<Java语言基础+>
Java语言基础(逻辑运算符的基本用法) Java语言基础(逻辑运算符&&和&的区别) Java语言基础(位运算符的基本用法1) Java语言基础(位异或运算符的特点及面试题) ...
随机推荐
- 数据结构与算法-queue
队列和stack类似,stack是先进后出,而queue的先进先出,也是一种特殊的线性表 基本概念 概念 队列是一种特殊的线性表 队列仅在线性表的两端进行操作 队头(Front):取出数据元素的一端 ...
- BiLSTM-CRF模型理解
适用任务 中文分词.词性标注.命名实体识别是自然语言理解中,基础性的工作,同时也是非常重要的工作. 在很多NLP的项目中,工作开始之前都要经过这三者中的一到多项工作的处理. 在深度学习中,有一种模型可 ...
- js放到head中失效的原因与解决方法
1.今天写js碰到一个奇怪的问题,写好的js放到body里面执行,但是放到head中没有任何效果,为什么导致这种原因呢? 看失效代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
- vsftpd下载文件时内容乱码
windows客户端访问Linux服务端的ftp并下载文档时,内容会出现乱码,这是由于vsftpd文件服务器不支持转码功能 通过java FTPClient下载 方法为 OutputStream is ...
- SQLServer学习之表的操作
SQLServer学习之表的操作 关系数据库通常包含多个表.数据库实际上是表的集合,数据库的数据或者信息都是存储在表中的.表是对数据进行存储和操作的一种逻辑结构,每一个表都代表一个对用户意义的对象. ...
- SpringBoot起飞系列-自定义starter(十)
一.前言 到现在,我们可以看出来,如果我们想用一些功能,基本上都是通过添加spring-boot-starter的方式来使用的,因为各种各样的功能都被封装成了starter,然后把相关服务注入到容器中 ...
- 数位dp详解&&LG P2602 [ZJOI2010]数字计数
数位dp,适用于解决一类求x~y之间有多少个符合要求的数或者其他. 例题 题目描述 杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除 ...
- T100——取得系统参数值,如关帐日期
CALL cl_get_para(g_enterprise,g_site,'S-MFG-0031') RETURNING l_para_data 用此方法获取关帐日期
- 牛客 109 C 操作数 (组合数学)
给定长度为n的数组a,定义一次操作为:1. 算出长度为n的数组s,使得si= (a[1] + a[2] + ... + a[i]) mod 1,000,000,007:2. 执行a = s:现在问k次 ...
- Make It One CodeForces - 1043F (数论,最短路,好题)
大意: 给定序列$a$, 求最小子集, 使得gcd为1. 对于数$x$, 素因子多少次幂是无关紧要的, 这样就可以用一个二进制数来表示. $x$取$gcd$后的二进制状态最多$2^7$, 可以暴力枚举 ...