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语言基础(位异或运算符的特点及面试题) ...
随机推荐
- Django-Form组件-formset_factory
Formset 多个表单的集合,可以同时提交多个from表单中的数据,在web页面中,可以在同一个页面,提交多个form表单. Django针对不同的formset提供了3种方法: formset_f ...
- java导出execl报表
1. 下载jar包: 官方下载:http://poi.apache.org/download.html这里可以下载到它的最新版本和文档,目前最新版本是3.7,这里使用比较稳定的3.6版. 百度网盘下载 ...
- GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
GIL全局解释器锁 1.什么是GIL 官方解释:'''In CPython, the global interpreter lock, or GIL, is a mutex that prevents ...
- 今天发现一个Window系统服务增删改查神器:NSSM
官网地址:https://nssm.cc Win10系统下这个:https://nssm.cc/ci/nssm-2.24-101-g897c7ad.zip 官方的帮助,英语的,可以大概看一下: htt ...
- ubantu使用小结
一.root账户问题 1.初始登录的时候root密码是随机的,自己改一个. 2.登录界面没有root选项 解决: #gedit /usr/share/lightdm/lightdm.conf.d/50 ...
- Spark Streaming的实时词频和累加词频统计
(注:运行环境是Ubuntu16, pycharm) 1. 按时段统计:获取scoket端口传输的数据(英文数据即可,方便分词),统计各个时间段内每个单词出现的次数(每个时间段都分别统计,需要使用的关 ...
- lua程序设计(第4版)第二章习题
练习2.1:修改八皇后问题的程序,使其在输出第一个解后即停止运行. 解法:要使得有一个解就返回,首先要获得一个解,然后再返回或停止运行 练习2.2:解决八皇后问题的另一种方式是,先生成1-8之间的所有 ...
- 零零散散的python笔记 2
python2和python3的兼容性方面 工具 2to3 python3中自带的工具,可以检查python2升级到python3的diff: 2to3 x.py 2to3 -w x.py # ...
- SolidWorks学习笔记8 包覆,圆顶
包覆 在该平面上创建草图,点击A,创建文字 在左侧取消勾选“使用文档字体”,点击字体,重新设置高度,字体. 在草图上点击来放置. 点击特征->包覆, 在模型树中选择有文字的草图 这里面 选择圆柱 ...
- Kafka性能调优分析-线上环境篇
一.背景介绍: 在平时的开发中,使用kafka来发送数据已经非常熟悉,但是在使用的过程中,其实并没有比较深入的探索kafka使用过程中 一些参数配置,带来的损失可能就是没有充分的发挥出kfka的优势, ...